我是 MSBuild 的新手,我试图在我的项目中设置一个 MSBuildSettings.xml 文件,通过项目首选项中的“构建后事件命令行”选项调用,它执行 3 个特定任务。
$(MSBuildBinPath)\msbuild.exe "$(ProjectDir)MSBuild\MSBuildSettings.xml"
MSBuildSettings 执行 3 个特定任务。我的前 2 个任务(下面的“YUI”和“LESS”)运行良好。我要添加的新任务(“加密”)是在转换发生后加密 web.config。
我正在使用一个结构如下的 xml 文件:
<Project DefaultTargets="YUI;LESS;Encrypt;">
...
<Target Name="YUI">...</Target>
<Target Name="LESS" DependsOnTargets="YUI">...</Target>
<Target Name="Encrypt" AfterTargets="CopyAllFilesToSingleFolderForPackage">
<Exec Command="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -pef "connectionStrings" $(MSBuildProjectDirectory)\..\obj\Release\Package\PackageTmp -prov "MyProtectedDataProvider"" />
</Target>
</Project
我基本上试图通过命令行使用 aspnet_regiis 加密 connectionStrings 部分。(我也定义了自己的 Provider 并在工作。)我确实觉得有点奇怪,我正在尝试修改 PackageTmp 文件夹中的 web.config,但据我所知,这是转换后的 web 之前的最终位置.config 已部署(我显然不想更新项目中的原始 web.config 文件)。我不认为命令/执行有什么问题,因为它是它的时机。我根本不知道如何使第三步仅在发生转换后执行。
我已启用构建输出的详细信息视图选项,并通过 Microsoft.Web.Publishing.targets 文件尝试提出一个目标,我可以使用该目标仅在转换后调用我的 web.config 加密步骤已经发生,但无论我尝试什么 AfterTargets,我似乎总是得到:
The target "whatever" does not exist in the project.
我试过 PipelinePreDeployCopyAllFilesToOneFolder、TransformWebConfig、PipelineTransformPhase、CopyAllFilesToSingleFolderForPackage 等。
附加说明:我了解 web.config 仅在发布时进行转换(并且我正在使用文件系统选项进行发布)。
这也是普通的 MSBuild(没有 TFS 团队构建或类似的东西)。
对于加密 web.config 部分的转换后步骤的任何附加或替代选项也将不胜感激。