Mam projekt ac # .Net 4.0 utworzony za pomocą VS2010 i teraz jest dostępny za pomocą VS2012.
Próbuję opublikować tylko potrzebne pliki z tej witryny do lokalizacji docelowej (C: \ builds \ MyProject [Files])
Moja struktura plików: ./ProjectRoot/MyProject.csproj ./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Uruchamiam następujące za pośrednictwem programu MSBuild:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe ./ProjectRoot/MyProject.csproj / p: DeployOnBuild = true /p:PublishProfile=./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Oto plik XML w FileSystemDebug.pubxml
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>C:\builds\MyProject\</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
Wynikowe zachowanie to:
- plik zip jest tworzony tutaj: ./ProjectRoot/obj/Debug/Package/MyProject.zip
- Nic nie jest wdrażane w
<publishUrl>C:\builds\MyProject\</publishUrl>
WTF - utworzony plik zip zawiera śniadanie dla świń i zawiera pliki, które nie są potrzebne aplikacji.
Kiedy uruchamiam ten profil publikowania za pośrednictwem programu Visual Studio, tworzony jest folder w * C: \ builds \ MyProject * i zawiera dokładnie te artefakty, które chcę.
Jak uzyskać ten prosty wynik z programu MSBuild?
źródło
Condition="false"
istnieje w celu zapewnienia zgodności z poprzednimi wersjami. VS2010 wymaga, aby ten import istniał, nawet jeśli zostanie pominięty z powodu fałszywego stanu. Jeśli spojrzysz ponownie, zobaczysz, że csproj zawiera inny import, dla$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets
którego jest rozpoznawany plik docelowy dla bieżącej wersji programu Visual Studio.$(MSBuildToolsVersion)
w ścieżce do konta dla odpowiedniej wersji VS:<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
. To zadziałało dla mnie przy aktualizacji 1. VS2015Odpowiedź znalazłem tutaj: http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild
<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> <Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." /> <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" /> <ItemGroup> <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> </ItemGroup> <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" /> </Target>
msbuild Website.csproj "/p:Platform=AnyCPU;Configuration=Release;PublishDestination=F:\Temp\Publish" /t:PublishToFileSystem
źródło
Nadal miałem problemy po wypróbowaniu wszystkich powyższych odpowiedzi (używam Visual Studio 2013). Nic nie zostało skopiowane do folderu publikowania.
Problem polegał na tym, że jeśli uruchomię MSBuild z indywidualnym projektem zamiast rozwiązaniem, muszę umieścić dodatkowy parametr określający wersję Visual Studio:
/p:VisualStudioVersion=12.0
12.0
dotyczy VS2013, zamień na wersję, której używasz. Po dodaniu tego parametru po prostu działało.Pełna linia poleceń wygląda następująco:
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Znalazłem to tutaj:
http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/command-line-deployment
Stwierdzają:
źródło
Wydaje mi się, że Twój profil publikacji nie jest używany i wykonuje jakieś domyślne pakowanie. Cele publikowania w sieci Web firmy Microsoft robią wszystko, co robisz powyżej, wybiera właściwe cele na podstawie konfiguracji.
Mój działał bez problemu z kroku TeamCity MSBuild, ale podałem jawną ścieżkę do profilu, wystarczy nazwać go po imieniu bez .pubxml (np. FileSystemDebug). Zostanie znaleziony, o ile w standardowym folderze, który należy do Ciebie.
Przykład:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ./ProjectRoot/MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=FileSystemDebug
Zauważ, że zostało to zrobione przy użyciu wersji Visual Studio 2012 obiektów docelowych Microsoft Web Publish, zwykle znajdujących się w „C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web”. Sprawdź folder wdrażania dla określonych typów wdrożeń docelowych, które są używane
źródło
FYI: ten sam problem z uruchomieniem na serwerze kompilacji (Jenkins z zainstalowanym programem MSBuild 15, oparty na programie VS 2017 w projekcie sieci Web .NET Core 2.1).
W moim przypadku było to użycie celu „publikuj” w programie msbuild, który zignorował profil.
Więc moje polecenie msbuild zaczęło się od:
msbuild /t:restore;build;publish
To poprawnie uruchomiło proces publikowania, ale żadna kombinacja ani odmiana „/ p: PublishProfile = FolderProfile” nigdy nie działała w celu wybrania profilu, którego chciałem użyć („FolderProfile”).
Kiedy przestałem używać celu publikacji:
msbuild /t:restore;build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
Pomyślałem (głupio), że to nie ma znaczenia, ale gdy tylko użyłem przełącznika DeployOnBuild, poprawnie odebrał profil.
źródło
Właściwie wszystkie twoje odpowiedzi połączyłem z moim własnym rozwiązaniem, jak rozwiązać powyższy problem:
Wynik jest taki:
msbuild /t:restore /t:build /p:WebPublishMethod=FileSystem /p:publishUrl=C:\builds\MyProject\ /p:DeleteExistingFiles=True /p:LastUsedPlatform="Any CPU" /p:Configuration=Release
źródło
Najpierw sprawdź wersję Visual Studio komputera deweloperskiego, na którym można opublikować rozwiązanie (projekt). jak pokazano, dotyczy VS 2013
dodaj powyższą linię poleceń, aby określić, jaka wersja programu Visual Studio powinna skompilować projekt. Tak jak w poprzednich odpowiedziach, może się tak zdarzyć, gdy próbujemy opublikować tylko jeden projekt, a nie całe rozwiązanie.
Więc cały kod wyglądałby mniej więcej tak
„C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe” „C: \ Program Files (x86) \ Jenkins \ workspace \ Jenkinssecondsample \ MVCSampleJenkins \ MVCSampleJenkins.csproj” / T: Build; Package / p : Configuration = DEBUG / p: OutputPath = "obj \ DEBUG" / p: DeployIisAppPath = "Domyślna witryna internetowa / jenkinsdemoapp" /p:VisualStudioVersion=12.0
źródło
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Ten parametr jest tym, czego mi brakowało i naprawiłem mój problem. Wystarczy, że całkowicie wymienisz odpowiedź!