我对MSBuild还不熟悉,正在尝试在我的项目中设置一个单独的MSBuildSettings.xml文件,并通过“Post-build事件命令行”选项调用它,以执行3个特定的任务。
$(MSBuildBinPath)\msbuild.exe "$(ProjectDir)MSBuild\MSBuildSettings.xml"
MSBuildSettings有三个特定的任务。我的前两个任务(如下所示的“YUI”和“LESS”)都完美地工作了。我正在尝试添加的新任务(“Encrypt”)是在转换发生后加密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部分。(我也有自己定义和工作的提供程序。)我发现我正在尝试修改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 中的部分内容,也将不胜感激。