12

我的持续集成服务器 (TeamCity) 配置为在构建时运行我们应用程序中的所有单元测试。在运行这些测试之前,我需要更改一些 appSettings 以使它们对我们的 CI 服务器有效。通过使用 Visual Studio 提供的部署项目,我正在为我的 Web 项目实现类似的功能。我可以为测试项目做同样的事情吗?

谢谢,贡萨洛

4

3 回答 3

29

可以通过变通方法对 App.config 文件使用 Web.config 转换。

您只需在构建过程的正确阶段调用适当的 MSBuild 任务。
将此代码段添加到您的项目文件中:

<UsingTask
    TaskName="TransformXml"
    AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />

<Target Name="AfterCompile" Condition="exists('App.$(Configuration).config')">
    <!-- Generates the transformed App.config in the intermediate directory -->
    <TransformXml
        Source="App.config"
        Destination="$(IntermediateOutputPath)$(TargetFileName).config"
        Transform="App.$(Configuration).config" />
    <!-- Forces the build process to use the transformed configuration file -->
    <ItemGroup>
        <AppConfigWithTargetPath Remove="App.config"/>
        <AppConfigWithTargetPath
            Include="$(IntermediateOutputPath)$(TargetFileName).config">
            <TargetPath>$(TargetFileName).config</TargetPath>
        </AppConfigWithTargetPath>
    </ItemGroup>
</Target>

然后为您希望应用转换的每个构建配置将其他 App.config 文件添加到您的项目中。例如:

<ItemGroup>
    <None Include="App.config" />
    <None Include="App.Release.config">
        <DependentUpon>App.config</DependentUpon>
    </None>
</ItemGroup>

相关资源:

于 2011-02-23T13:25:58.210 回答
7

我创建了一个 Visual Studio 插件,可用于转换 app.config,其方式与转换 web.config 的方式相同。您可以在http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5找到加载项 SlowCheetah 。

我已经发布了一篇关于如何在构建服务器上使用它的博客。

于 2012-01-30T08:44:39.370 回答
6

我建议你包装你的配置查找,提取一个接口并在测试时存根。

于 2011-02-23T13:04:30.937 回答