我通过nuget安装了SlowCheetah软件包,并为我的web.config添加了基于Build config的转换文件。 但是,在构建时,web.config不会被转换。我检查了我的项目文件,确实看到了SlowCheetah PropertyGroup和Import元素的条目。我没有在项目文件中看到转换目标。 如果我添加app.config,app.config文件确实会被转换。 我的理解是,安装SlowCheetah软件包应该自动将web.config转换目标添加到项目的MSBuild文件中。我可以手动添加它,但我认为SlowCheetah开箱即用。 我错过了什么。请告诉我。 我的要求是我的web.config文件应该根据构建配置进行转换,转换后的web.config文件应该位于输出目录中。 谢谢并感谢所有帮助。
答案 0 :(得分:15)
只有在使用发布功能部署项目时,Visual Studio才会进行转换。要在进行构建时执行此操作,您需要调整MSBuild脚本。完整的解决方案是here。这里有要点:
项目中的文件创建一个名为Web.Base.config的文件,除了 现有的Web.Debug.config和Web.Release.config。这个文件将是 相当于你原来的Web.config,因为它将是你的基础 改造的探讨。您将最终得到这些文件:
Web.config,Web.Base.config,Web.Debug.config,Web.Release.config和 Web.config文件。将以下配置添加到您的底部 .csproj文件,就在结束-tag:
之前
<Target Name="BeforeBuild">
<TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
更新:从评论中的提醒我意识到我也有一个 在发布时,Visual Studio将XML转换两次的问题 一个专案。对此的解决方案是向条件添加条件 像这样的目标标签:
<Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''">
答案 1 :(得分:5)
详细说明Philipp的回答我找到了一个更简单的解决方案: 不需要Web.Base.Config并且没有覆盖web.config的问题,这会导致源代码管理中出现问题。
BeforeBuild:您将目标设为TargetDile和TargetFileName。
AfterBuild:您在构建完成后将其复制到已发布的网站。
<Target Name="BeforeBuild">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="$(TargetDir)$(TargetFileName).config" />
</Target>
<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Dev' Or '$(Configuration)' == 'Test' Or '$(Configuration)' == 'Prod'">
<Delete Files="$(TargetDir)_PublishedWebsites\$(ProjectName)\Web.config" />
<Copy SourceFiles="$(TargetDir)$(TargetFileName).config" DestinationFiles="$(TargetDir)_PublishedWebsites\$(ProjectName)\Web.config" />
</Target>
答案 2 :(得分:0)
您是否将转换文件的“复制到输出目录”属性设置为“不复制”? 请检查您的项目文件。
在项目文件中,应添加以下条目(取决于您安装的版本,在本例中为2.5.7):
<PropertyGroup Label="SlowCheetah">
<SlowCheetah_EnableImportFromNuGet Condition=" '$(SC_EnableImportFromNuGet)'=='' ">true</SlowCheetah_EnableImportFromNuGet>
<SlowCheetah_NuGetImportPath Condition=" '$(SlowCheetah_NuGetImportPath)'=='' ">$([System.IO.Path]::GetFullPath( $(MSBuildProjectDirectory)\..\packages\SlowCheetah.2.5.7\tools\SlowCheetah.Transforms.targets ))</SlowCheetah_NuGetImportPath>
<SlowCheetahTargets Condition=" '$(SlowCheetah_EnableImportFromNuGet)'=='true' and Exists('$(SlowCheetah_NuGetImportPath)') ">$(SlowCheetah_NuGetImportPath)</SlowCheetahTargets>
<Import Project="$(SlowCheetahTargets)" Condition="Exists('$(SlowCheetahTargets)')" Label="SlowCheetah" />