2014-09-22 42 views
1

在我的VS 2010解决方案中,我有四个Web项目。Xml Transformation for linked web.config

第一个项目是开发项目。其他三个仅用于发布第一个项目页面的不同子集。几乎其他三个项目中的所有文件都是第一个项目文件的链接。

所有项目共享相同的web.config(从第一个项目链接)。

我想实现的是根据正在发布的项目对web.config进行不同的xml转换。 “添加配置变换”选项只有在文件实际存在的第一个项目中才能正常工作。看来你不能为链接的web.config添加配置转换。转换被添加,但他们似乎没有引用链接的web.config,他们似乎并没有得到执行。

我试图手动篡改* .csproj文件,以便我可以使这些转换引用链接的文件,但我无法使其工作。

有没有办法让xml config变换链接的web.config?

替代方法

我只是用以下解决方法:

我创建了正常的web.config文件中的每个项目(没有链接到第一个项目的web.config)。我在每个项目的web.config中添加了我想要的转换。然后,在每个项目中,我添加了一个Before Build事件,它将复制第一个项目的web.config并覆盖当前项目的web.config。这样,新的覆盖配置文件将执行转换,并发布正确的配置。

虽然我的问题仍然有效。

+1

web.config的哪些部分不同?我把我的结构在appsettings中保存在一个单独的配置文件中,并使用configSource属性进行链接。也许你可以做这样的事情,并在每个项目中有不同的部分,但在第一个项目 – 2014-09-22 18:03:58

+0

@matt_lethargic中的主web.config我还没有看过configSource属性。我会看看它,谢谢! – 2014-09-23 13:44:19

回答

1

哟可以写/重写项目文件内的任何转换源/模式到任何路径。

我的真实例子是独立应用程序。答案帖子底部的问题解决方案。
我有2个项目的解决方案:
1.源项目 “NetrikaLabManager” 与真正的App.config和两个变换CONFIGS(App.Debug.config和App.Release.config)
2.目标项目“NetrikaLabManagerGui “并且我想要与第一个项目具有相同的转换规则的配置。

我的下一个步骤是:

  1. 三个源配置文件只是链接到目标项目的链接。这只是为了标记外部配置,可能会被忽略。
  2. 打开目标.proj文件进行编辑并进行下一次更改:
    2.1。更改转换条件中检查文件的路径:<Target Name="AfterCompile" Condition="Exists('app.$(Configuration).config')">

    <Target Name="AfterCompile" Condition="Exists('..\NetrikaLabManager\App.$(Configuration).config')">
    2.2。在 “的TransformXML” 元素
    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
    改变pathes到
    <TransformXml Source="..\NetrikaLabManager\App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="..\NetrikaLabManager\App.$(Configuration).config" />
  3. 保存,重装项目和重建。
  4. 利润!

问题摘要 - 在每个proj文件中,您必须手动将任何“真实”配置转换文件添加到您的卫星项目,并将“转换”和“条件”属性保持不变,但更改“源”路径属性到您的开发配置文件。这将对Dev配置应用单独的卫星转换。

+0

为什么不改变Condition =“Exists('app。$(Configuration).config')”> Condition =“Exists('.. \ NetrikaLabManager \ App。$(Configuration).config')”> 然后你不需要将文件直接复制到单个项目中 – 2017-07-05 08:45:22