SlowCheetah - 使用转换的链接配置文件来共享配置元素

时间:2012-04-19 12:58:27

标签: asp.net-mvc-3 web-config slowcheetah

我正在尝试做什么

目前,我们在解决方案中的多个项目中都有重复的WCF配置设置。我想将WCF配置值存储在一个文件中,然后可以根据需要从多个项目中引用它。配置文件必须可转换,以允许不同环境中的不同值。

我尝试了什么

我做了一些研究,其他人尝试过与SlowCheetah和链接文件类似的东西。所以这就是我试过的。值得注意的是,我们的解决方案包含许多项目,一些MVC3,一些控制台应用程序和一些类库。

  1. 我创建了一个Wcf.Client.config文件,将其添加到公共类库并使用SlowCheetah向其添加了转换
  2. 我想在MVC3项目中引用此文件,因此我创建了配置文件的链接
  3. 在MVC3项目的web.config文件中,我添加了一个包含客户端元素的组,其configSource属性设置为“Wcf.Client.config”
  4. 我已将链接配置文件的“复制到输出目录”属性设置为“如果更新则复制”
  5. 我还在链接文件中添加了一个转换(我不确定这会起作用,但它会成功链接文件)
  6. 问题

    我已经为本地和开发环境进行了转换。不幸的是,当我在开发人员配置中运行Web应用程序(或发布它)时,不会获取转换。查看已发布的文件,我可以看到我放置在Web项目根目录中的链接文件已成功转换,但是,它是从bin文件夹中读取的,bin文件夹中的文件是不是< / em>转型。

    我实际上在问什么?

    我真正想知道的是,我做错了什么?有没有人尝试过我上面描述的并使其有效?或者没有人有人找到另一种方式来共享转换后的配置文件?

    部分代码

    我创造了一个非常简单的test project,希望能够解释我正在努力做的比我漫无边际的解释更好。随意看看。如果您构建或发布它,您将看到MVC3项目的bin文件夹中的Wcf.Client.config文件尚未转换。

1 个答案:

答案 0 :(得分:2)

我在answer找到了合适的解决方案。

我已完成以下步骤:

1)我在解决方案目录中创建了配置。我的名字是CommonSettings.config

2)我添加了转换配置CommonSettings.Debug.configCommonSettings.Debug.config和源配置(因为Microsoft的构建任务由于某种原因无法写入源文件)CommonSettings.Source.config

3)。然后在一个公共类库(一个被需要CommonSettings.config的所有项目引用的库)中,我通过添加以下行来编辑项目文件:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />

<Target Name="BeforeBuild">
    <CallTarget Targets="TransformCommonSettings" />
</Target>

<Target Name="TransformCommonSettings">
    <ItemGroup>
        <ConfigsToTransform Include="..\CommonSettings.config" />
    </ItemGroup>

    <TransformXml 
        Source="@(ConfigsToTransform->'%(RelativeDir)%(Filename).Source%(Extension)')"
        Destination="%(FullPath)"
        Transform="%(RelativeDir)%(Filename).$(Configuration)%(Extension)"
        Condition="Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)')" /> 
</Target>

4)然后我将CommonSettings.config添加到我的Web应用程序(以及一些Windows应用程序和测试)作为链接。在属性窗口中,我将构建操作设置为内容,将复制到输出目录设置为始终复制 5)在注册Web.config部分后的commonSettings文件中,我添加了以下行:

<commonSettings configSource="bin\CommonSettings.config" />

6)对于测试项目和控制台/ Windows应用程序,我在App.config中设置了适当的值:

<commonSettings configSource="CommonSettings.config" />

此处路径中没有bin,因为App.configCommonSettings.config都被复制到输出目录。

现在,在我选择的配置中构建后,CommonSettings.config被正确转换,并将正确的版本复制到输出目录。

好的部分是你不需要没有SlowCheetah扩展,它可以在你的构建服务器上运行,如果你包含任务,这对我来说是完美的.dll:)

一个问题是当你刚刚运行一个项目(点击F5)时,转换将不会运行。我不得不将这个构建任务添加到我的所有项目中,这会使建筑过程减慢一秒钟,但对我来说这是可以接受的。