链接web.config的Xml转换

时间:2014-09-22 13:26:37

标签: c# asp.net visual-studio-2010 xslt xdt-transform

在我的VS 2010解决方案中,我有四个网络项目。

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

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

我想要实现的是根据正在发布的项目对web.config进行不同的xml转换。 “添加配置转换”选项仅适用于文件实际位于的第一个项目。您似乎无法为链接的web.config添加配置变换。添加了转换,但它们似乎没有引用链接的web.config,它们似乎没有被执行。

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

有没有办法让xml配置转换为链接的web.config?

解决方法

我刚刚使用了下面的解决方法:

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

我的问题仍然有效。

1 个答案:

答案 0 :(得分:1)

Yo可以将项目文件中的任何转换源/模式写入/重写到任何路径。

我有一个独立应用程序的真实示例。在答案帖的底部解决你的问题。
我有两个项目的解决方案:
 1.源项目" NetrikaLabManager"用真正的App.config和两个转换配置(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。更改&#34; TransformXml&#34;元素
    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />

    <TransformXml Source="..\NetrikaLabManager\App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="..\NetrikaLabManager\App.$(Configuration).config" />
  3. 保存,重新加载项目并重建。
  4. 的利润!
  5. 您的问题摘要 - 在每个项目文件中,您必须手动添加任何&#34; real&#34;将转换文件配置到您的卫星项目并离开&#34;转换&#34;和&#34;条件&#34;属性不变,但改变了&#34; Source&#34;您的Dev配置文件的path属性。这将为Dev config应用单独的卫星转换。