web.config文件从命令行转换

she*_*per 36 msbuild

我有两个目标构建环境; 发布和分期.Web.config看起来像这样:

<system.web>     
    <authentication mode="Windows">
    </authentication>

    <authorization>
        <deny users="?" />
    </authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)

我想通过构建到暂存配置来转换它:Web.Staging.config

<system.web>     
    <authentication mode="Windows">
    </authentication>

    <authorization xdt:Transform="Replace">
        <deny users="?" />
        <allow roles="StagingRoles" />
        <deny users="*" />
    </authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)

我从命令行构建如下:

msbuild buildscript.build /p:Configuration=Staging
Run Code Online (Sandbox Code Playgroud)

在构建之后,我没有看到在构建工件文件夹中转换的web.config文件.这里有什么问题吗?

谢谢

Jon*_*ire 34

如果将以下xml添加到Web应用程序的.csproj文件的底部,则可以确保在每次构建之前进行配置转换:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild">
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
Run Code Online (Sandbox Code Playgroud)

编辑:响应您的注释,您应该能够使用Web.config作为TransformXml任务中的源参数(请参阅步骤2).如果您只想在构建脚本中执行配置转换,请按照以下说明操作:

1)在构建脚本中导入WebApplication.targets,如下所示:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
Run Code Online (Sandbox Code Playgroud)

2)在构建脚本目标中执行TransformXml构建任务:

<Target Name="MyBuildScriptTarget">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
    ...other build tasks...
</Target>
Run Code Online (Sandbox Code Playgroud)


Dav*_*ite 22

乔纳森的回答很好.我稍微调整它以允许保留原始的Web.config文件.这些是我添加到.csproj文件底部的行:

  <!-- the step to copy the config file first avoids a 'File is being used by another process' error -->
  <Target Name="BeforeBuild">
    <Copy SourceFiles="Web.config" DestinationFiles="Web.temp.config" OverwriteReadOnlyFiles="True" />
    <TransformXml Source="Web.temp.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
  </Target>
  <Target Name="AfterBuild">
    <Copy SourceFiles="Web.temp.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="True" />
    <Delete Files="Web.temp.config" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

我可以看到通过在Visual Studio(或命令行)中运行构建来转换web.config文件.

  • XML中存在错误.在TransformXml中,您应该交换Source和Destination.否则不应用转换.无论如何,你的答案很多!经过几天的搜索,它似乎是网络上唯一正确的答案 (2认同)

amb*_*ous 8

对乔纳森答案的微小改进:

使用下面的这一行来导入Web目标将允许与任何Visual Studio版本兼容.请注意,这与版本v10.0无关

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
Run Code Online (Sandbox Code Playgroud)