当我首次发布包含 ASP.NET Web 应用程序的解决方案时,会忽略 .wpp.targets 文件。发布文件夹还包含不应发布的文件。
删除我的发布文件夹中的所有文件并再次发布后,一切都很好。但是当我从视觉工作室做一个干净的解决方案时,.wpp.targets 文件再次被忽略。
希望有人可以解决这个问题或解释为什么会这样。我想在我们的构建服务器上使用它,构建总是从一个干净的解决方案开始。
我用过的:
MSBuild 版本 15.8.166 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe" WebApplication1.sln /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p :WebPublishMethod=文件系统 /p:publishUrl=C:\test
MSBuild 版本 16.0.360 "C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin\msbuild.exe" WebApplication1.sln /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p :WebPublishMethod=文件系统 /p:publishUrl=C:\test
我使用包含我的项目名称的 wpp.target 文件运行构建,但我也尝试使用以下 MSBuild 参数:/p:WebPublishPipelineCustomizeTargetFile=C:\Users\username\source\repos\Test\WebApplication1\test .wpp.targets
更新
首次构建项目时或清理构建后,*.wpp.targets 文件中的通配符不起作用。这是我的 *.wwp.targets 文件的示例:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ExcludeFromPackageFolders Include="bin\roslyn">
<FromTarget>Roslyn</FromTarget>
</ExcludeFromPackageFolders>
<ExcludeFromPackageFiles Include="bin\Newtonsoft.*">
<FromTarget>Newtonsoft</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
</Project>
正如预期的那样,罗斯林被排除在外。但不排除 Newtonsoft.*,因为名称中有通配符。
当手动删除 obj 文件夹或之前执行构建时,通配符也可以正常工作。
我用过的:MSBuild 15.8.166 版和 MSBuild 16.0.360 版
使用的 msbuild comando 示例:“C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin\msbuild.exe”WebApplicationTestForMsBuild.sln /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=文件系统 /p:publishUrl=C:\test
在其他项目中,我们注意到某些通配符似乎适用于大多数文件,但并非适用于所有文件。这方面的一个例子是: " <ExcludeFromPackageFiles Include="bin\*.pdb">
" 最多的 pdb 文件或排除但不是全部。
我想在我们的构建服务器上使用它,构建总是从一个干净的解决方案开始。这个问题似乎是 msbuild 中的一个错误,但如果您知道解决方案,请与我分享。
更新 2
我执行的一项测试的步骤:
- 在 Visual Studio Enterprise 2017(版本 15.9.7)中创建一个新的 Empty ASP.Net Web Application (.NET Framework 4.6.1) 项目。
- 将 [ProjectName] .wpp.targets 添加到包含前面描述的数据的项目中。
- 安装nuget包Newtonsoft.Json(版本12.0.1)(用作示例)
- 我在命令提示符下运行以下命令:“C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe” [projectName].csproj /p:DeployOnBuild=true / p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:publishUrl=C:\test /p:DeleteExistingFiles=True
- 我查看了 C:\test\bin 文件夹,发现了以下文件:
- Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll
- Newtonsoft.Json.dll
- 牛顿软件.Json.pdb
- [项目名称].dll
- [projectName].pdb 但不应发布 Newtonsoft.Json.dll 和 Newtonsoft.Json.pdb 文件。
- 我再次运行 msbuild 命令,它按预期工作。我在发布文件夹中只有以下文件:
- Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll
- [项目名称].dll
- [项目名称].pdb
- 我在我的 Visual Studio 实例中或通过 msbuild 命令做了一个干净的解决方案:“C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe”WebApplication7wpp.csproj -target:干净的
- 再次运行 msbuild build 命令并再次添加 Newtonsoft 文件。
当我不使用通配符时, wpp.targets 按预期工作。