2012-04-19 84 views
3

我试图做SlowCheetah - 使用转换链接配置文件共享配置元素

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

我已经试过

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

  1. 我创建了一个Wcf.Client.config文件,将其添加到一个共同的类库和使用SlowCheetah
  2. 我要引用此文件,所以我已经创建了一个MVC3项目添加变换到它到配置文件的链接
  3. 在MVC3项目的web.config文件中,我添加了一个包含客户端元素的组,其configSource属性设置为“Wcf.Client.config”
  4. 我已经设置了“复制到输出目录”属性的链接配置文件“复制,如果更新”
  5. 我还加了一个变换t ○链接文件(我不知道这会工作,但它成功地链接的文件)

问题

我对本地和开发环境的变换。不幸的是,当我在开发人员配置中运行Web应用程序(或发布它)时,转换不会被拾取。看看已发布的文件,我可以看到我放置在Web项目根目录下的链接文件已成功转换,但它是从bin文件夹中读取的,bin文件夹中的文件是而非已转换。

我究竟在问什么?

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

一些代码

我创建了一个非常简单的test project它希望能解释什么,我试图做的比我散漫的解释更好。随意看看。如果您构建或发布它,则会看到MVC3项目的bin文件夹中的Wcf.Client.config文件尚未转换。

+0

菲尔,你有没有这个运气?我们正在寻找类似的东西... – 2012-06-20 19:41:15

+0

恐怕不是。我没有设法让SlowCheetah按照我的意愿工作,但我没有设法找到另一个解决方案。不幸的是,我浪费了相当多的时间在这个问题上,所以我只好做了重复的配置,这是垃圾,但他们很少会改变,所以不应该引起任何问题。 – 2012-06-21 09:03:44

+0

你可以试试最新版本2.5.1,我刚刚发布到http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5?让我知道如果它不起作用。大约一两个月前,我为链接文件做了大量工作。 – 2012-08-17 04:54:06

回答

2

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

我已经做了以下步骤:

1)我创建了解决方案目录的配置。我命名为CommonSettings.config

2)我加改造CONFIGS CommonSettings.Debug.configCommonSettings.Debug.config和源配置(因为微软的建设任务便无法写入由于某种原因,源文件)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)转换将不会运行。我不得不将这个构建任务添加到我的所有项目中,这大大减慢了构建过程的速度,但对我来说这是可以接受的。