J'ai un projet ac # .Net 4.0 créé avec VS2010 et maintenant accessible avec VS2012.
J'essaie de publier uniquement les fichiers nécessaires de ce site Web vers un emplacement de destination (C: \ builds \ MyProject [Files])
Ma structure de fichiers: ./ProjectRoot/MyProject.csproj ./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
J'exécute ce qui suit via MSBuild:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe ./ProjectRoot/MyProject.csproj / p: DeployOnBuild = true /p:PublishProfile=./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Voici le xml dans 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>
Le comportement résultant est:
- un fichier zip est créé ici: ./ProjectRoot/obj/Debug/Package/MyProject.zip
- Rien n'est déployé sur
<publishUrl>C:\builds\MyProject\</publishUrl>
WTF - le fichier zip qui est créé est un petit-déjeuner de porcs et plein de fichiers qui ne sont pas nécessaires pour l'application.
Lorsque j'exécute ce profil de publication via Visual Studio, un dossier est créé dans * C: \ builds \ MyProject * et contient les artefacts exacts que je veux.
Comment obtenir ce résultat simple de msbuild?
la source
Condition="false"
existe pour la compatibilité descendante. VS2010 nécessite que cette importation existe, même si elle est ignorée en raison de la condition erronée. Si vous regardez à nouveau, vous verrez que le csproj contient une autre importation pour$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets
laquelle résout le fichier cibles pour la version actuelle de Visual Studio.$(MSBuildToolsVersion)
la voie pour tenir compte de la bonne Version VS:<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
. Cela a fonctionné pour moi sur VS2015 Update 1.J'ai trouvé la réponse ici: 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
la source
J'ai encore des problèmes après avoir essayé toutes les réponses ci-dessus (j'utilise Visual Studio 2013). Rien n'a été copié dans le dossier de publication.
Le hic, c'est que si j'exécute MSBuild avec un projet individuel au lieu d'une solution, je dois mettre un paramètre supplémentaire qui spécifie la version de Visual Studio:
/p:VisualStudioVersion=12.0
12.0
est pour VS2013, remplacez-le par la version que vous utilisez. Une fois que j'ai ajouté ce paramètre, cela a juste fonctionné.La ligne de commande complète ressemble à ceci:
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Je l'ai trouvé ici:
http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/command-line-deployment
Ils déclarent:
la source
Il me semble que votre profil de publication n'est pas utilisé et fait un empaquetage par défaut. Les cibles Microsoft Web Publish font tout ce que vous faites ci-dessus, elles sélectionnent les cibles correctes en fonction de la configuration.
J'ai fait fonctionner le mien sans problème depuis l'étape TeamCity MSBuild, mais j'ai spécifié un chemin explicite vers le profil, il vous suffit de l'appeler par son nom sans .pubxml (par exemple FileSystemDebug). Il sera trouvé aussi longtemps que dans le dossier standard, qui est le vôtre.
Exemple:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ./ProjectRoot/MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=FileSystemDebug
Notez que cela a été fait à l'aide des versions Visual Studio 2012 des cibles Microsoft Web Publish, normalement situées dans «C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web». Consultez le dossier de déploiement pour les cibles de types de déploiement spécifiques qui sont utilisées
la source
Pour info: même problème avec l'exécution sur un serveur de build (Jenkins avec msbuild 15 installé, piloté depuis VS 2017 sur un projet web .NET Core 2.1).
Dans mon cas, c'était l'utilisation de la cible «publier» avec msbuild qui ignorait le profil.
Donc, ma commande msbuild a commencé par:
msbuild /t:restore;build;publish
Cela a correctement déclenché le processus de publication, mais aucune combinaison ou variation de "/ p: PublishProfile = FolderProfile" n'a jamais fonctionné pour sélectionner le profil que je voulais utiliser ("FolderProfile").
Lorsque j'ai arrêté d'utiliser la cible de publication:
msbuild /t:restore;build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
J'ai (bêtement) pensé que cela ne ferait aucune différence, mais dès que j'ai utilisé le commutateur DeployOnBuild, il a correctement pris le profil.
la source
En fait, j'ai fusionné toutes vos réponses à ma propre solution pour résoudre le problème ci-dessus:
Le résultat est comme ça:
msbuild /t:restore /t:build /p:WebPublishMethod=FileSystem /p:publishUrl=C:\builds\MyProject\ /p:DeleteExistingFiles=True /p:LastUsedPlatform="Any CPU" /p:Configuration=Release
la source
Vérifiez d'abord la version Visual studio du PC développeur qui peut publier la solution (projet). comme indiqué est pour VS 2013
ajoutez la ligne de commande ci-dessus pour spécifier le type de version de Visual Studio qui doit générer le projet. Comme les réponses précédentes, cela peut se produire lorsque nous essayons de publier un seul projet, pas la solution entière.
Donc, le code complet serait quelque chose comme ça
"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 = "Site Web par défaut / jenkinsdemoapp" /p:VisualStudioVersion=12.0
la source
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Ce paramètre est ce qui me manquait et a résolu mon problème. Il vous suffit de mentionner complètement la réponse!