.net - 使用 AfterTargets 的 MSBuild 任务在转换后加密 web.config

标签 .net msbuild web-config

我是 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 &quot;connectionStrings&quot; $(MSBuildProjectDirectory)\..\obj\Release\Package\PackageTmp -prov &quot;MyProtectedDataProvider&quot;" />
    </Target>
</Project

我主要尝试通过命令行使用 aspnet_regiis 加密 connectionStrings 部分。 (我也有自己的 Provider 定义和工作。)我确实觉得有点奇怪,我试图修改 PackageTmp 文件夹中的 web.config,但据我所知,这是转换后的 web 之前的最终位置.config 已部署(我显然不想更新项目中的原始 web.config 文件)。我认为命令/执行没有任何问题,因为它的时间安排。我根本不知道如何让这第三步仅在转换发生后执行。

我已经启用了构建输出的详细 View 选项,并通过 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 部分的转换后步骤的任何其他或替代选项,我们也将不胜感激。

最佳答案

我最终只使用了具有以下结构的 *.wpp.targets 文件:

<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
    <Target Name="AfterBuild">
        ... My YUI steps and my LESS steps ...
    </Target>
    <Target Name="Encrypt" AfterTargets="CopyAllFilesToSingleFolderForPackage">
        ... My web.config encrypt steps ...
    </Target>
</Project>

老实说,我并不完全理解第一步 (AfterBuild) 命名背后的原因,它只是自动知道何时运行。我真的宁愿有自己的名字和一个清晰的 AfterTargets 或 BeforeTargets 之类的东西,但我没有采用这种方法。带有 AfterTargets 的第二个目标对我来说有些意义。

但无论如何,它有效。现在一切都在一个 wpp.targets 文件中,并且看起来运行良好。每次更改 wpp.targets 文件时都必须卸载/重新加载项目文件有点痛苦 - 这太愚蠢了。

关于.net - 使用 AfterTargets 的 MSBuild 任务在转换后加密 web.config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11198252/

相关文章:

.net - Directory.GetFiles 返回重复的文件名

c# - 使用 --configuration 运行的 dotnet ef 导致 MSB4006

来自 web.config 的 IIS 虚拟目录

c# - 无法读取配置部分 'customErrors',因为它缺少部分声明

c# - 使用命令 aspnet_regiis.exe 加密 web.config

c# - 循环枚举器的 PLINQ 迭代导致死锁

c# - 获取被请求/被请求的页面名称

c# - 如何将 C/C++ dll 导入到 .NET 应用程序

msbuild - 错误 MSB4064 : The "OverwriteReadOnlyFiles" parameter is not supported by the "Copy" task

visual-studio - 在 x86 和 x64 机器上使用 Hintpath