我有两个目标构建环境; 发布和分期.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文件.
对乔纳森答案的微小改进:
使用下面的这一行来导入Web目标将允许与任何Visual Studio版本兼容.请注意,这与版本v10.0无关
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20056 次 |
最近记录: |