1

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

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

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

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

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

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

解决方法

我刚刚使用了以下解决方法:

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

我的问题仍然有效。

4

1 回答 1

1

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

我有一个独立应用程序的真实示例。答案帖子底部的问题解决方案。
我有 2 个项目的解决方案:
1. 具有真实 App.config 和两个转换配置(App.Debug.config 和 App.Release.config)的源项目“NetrikaLabManager”
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" />

    <TransformXml Source="..\NetrikaLabManager\App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="..\NetrikaLabManager\App.$(Configuration).config" />
  3. 保存,重新加载项目并重建。
  4. 利润!

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

于 2017-03-22T08:04:19.250 回答