Tenho um projeto c # .Net 4.0 criado com VS2010 e agora sendo acessado com VS2012.
Estou tentando publicar apenas os arquivos necessários deste site para um local de destino (C: \ builds \ MyProject [Files])
Minha estrutura de arquivo: ./ProjectRoot/MyProject.csproj ./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Estou executando o seguinte por meio do MSBuild:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe ./ProjectRoot/MyProject.csproj / p: DeployOnBuild = true /p:PublishProfile=./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Aqui está o xml em 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>
O comportamento resultante é:
- um arquivo zip é criado aqui: ./ProjectRoot/obj/Debug/Package/MyProject.zip
- Nada é implantado no
<publishUrl>C:\builds\MyProject\</publishUrl>
WTF - o arquivo zip que é criado é um café da manhã dos porcos e cheio de arquivos desnecessários para o aplicativo.
Quando executo este perfil de publicação por meio do Visual Studio, uma pasta é criada em * C: \ builds \ MyProject * e contém os artefatos exatos que desejo.
Como faço para obter este resultado simples do msbuild?
fonte
Condition="false"
existe para compatibilidade com versões anteriores. O VS2010 requer que esta importação exista, mesmo se for ignorada devido à condição falsa. Se você olhar novamente, verá que o csproj contém outra importação para a$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets
qual resolve o arquivo de destino da versão atual do Visual Studio.$(MSBuildToolsVersion)
no caminho para a conta para a versão adequada VS:<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
. Isso funcionou para mim na atualização 1 do VS2015.Encontre a resposta aqui: 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
fonte
Ainda tive problemas depois de tentar todas as respostas acima (eu uso o Visual Studio 2013). Nada foi copiado para a pasta de publicação.
O problema é que se eu executar o MSBuild com um projeto individual em vez de uma solução, tenho que colocar um parâmetro adicional que especifica a versão do Visual Studio:
/p:VisualStudioVersion=12.0
12.0
é para VS2013, substitua pela versão que você usa. Depois de adicionar esse parâmetro, ele simplesmente funcionou.A linha de comando completa se parece com isto:
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Eu encontrei aqui:
http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/command-line-deployment
Eles afirmam:
fonte
Parece-me que o seu perfil de publicação não está sendo usado e está executando um pacote padrão. Os destinos Microsoft Web Publish fazem tudo o que você está fazendo acima, ele seleciona os destinos corretos com base na configuração.
Consegui que o meu funcionasse sem problemas na etapa TeamCity MSBuild, mas especifiquei um caminho explícito para o perfil, basta chamá-lo pelo nome sem .pubxml (por exemplo, FileSystemDebug). Ele será encontrado contanto que esteja na pasta padrão, que é a sua.
Exemplo:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ./ProjectRoot/MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=FileSystemDebug
Observe que isso foi feito usando as versões do Visual Studio 2012 dos destinos Microsoft Web Publish, normalmente localizados em "C: \ Arquivos de programas (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web". Verifique a pasta de implantação para os destinos de tipos de implantação específicos que são usados
fonte
Para sua informação: O mesmo problema com a execução em um servidor de compilação (Jenkins com msbuild 15 instalado, conduzido do VS 2017 em um projeto da web .NET Core 2.1).
No meu caso, foi o uso do destino "publicar" com msbuild que ignorou o perfil.
Então, meu comando msbuild começou com:
msbuild /t:restore;build;publish
Isso acionou corretamente o processo de publicação, mas nenhuma combinação ou variação de "/ p: PublishProfile = FolderProfile" funcionou para selecionar o perfil que eu queria usar ("FolderProfile").
Quando parei de usar o destino de publicação:
msbuild /t:restore;build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
Eu (tolamente) pensei que não faria diferença, mas assim que usei o switch DeployOnBuild ele pegou o perfil corretamente.
fonte
Na verdade, juntei todas as suas respostas à minha própria solução de como resolver o problema acima:
O resultado é assim:
msbuild /t:restore /t:build /p:WebPublishMethod=FileSystem /p:publishUrl=C:\builds\MyProject\ /p:DeleteExistingFiles=True /p:LastUsedPlatform="Any CPU" /p:Configuration=Release
fonte
Primeiro verifique a versão do Visual Studio do PC do desenvolvedor que pode publicar a solução (projeto). como mostrado é para VS 2013
adicione a linha de comando acima para especificar que tipo de versão do Visual Studio deve construir o projeto. Conforme as respostas anteriores, isso pode acontecer quando estamos tentando publicar apenas um projeto, não toda a solução.
Então, o código completo seria algo assim
"C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe" "C: \ Arquivos de programas (x86) \ Jenkins \ workspace \ Jenkinssecondsample \ MVCSampleJenkins \ MVCSampleJenkins.csproj" / T: Build; Pacote / p : Configuração = DEBUG / p: OutputPath = "obj \ DEBUG" / p: DeployIisAppPath = "Site padrão / jenkinsdemoapp" /p:VisualStudioVersion=12.0
fonte
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Este parâmetro é o que estava faltando e resolvi meu problema. Você só precisa mencionar a resposta completamente!