在3.5版本的Web Forms应用程序中使用SlowCheetah配置转换来转换Web.config

7
我将SlowCheetah下载到了一个旧的.Net 3.5 Web Forms应用程序中,以便为web.config添加转换。在过去,我使用SlowCheetah成功地将app.config与Windows服务和控制台应用程序进行了转换。在这种情况下,配置文件被转换并放置在bin目录下作为ApplicationName.exe.config文件。
但是,在这个Web Forms应用程序中,配置文件从未出现在bin目录下,因为Web Forms站点只是通过将.dll文件放入bin中,并且IIS指向根目录来构建的。因此,与其将web.config包含在构建过程中并打包到bin文件夹中,它会留在根位置。
在根目录中没有对web.config进行任何转换,这是件好事,因为位于根目录中的web.config在源代码控制中,是我们执行转换的文件。
如果能让web.config包含在构建过程中,这样SlowCheetah就可以对其进行转换,然后将其放置在bin目录中,我们将不得不手动将其从bin目录中取出并放回服务器的根级别,但这值得拥有这些转换。
有人知道如何针对我的web.config运行变换或将其包含在构建过程中以使SlowCheetah发挥效果吗?
谢谢!
更新:
我修改了web.config的属性,现在它已经包含在构建中,但是仍然没有应用转换。
构建操作:嵌入式资源
复制到输出目录:始终复制
2个回答

6

解决方案

我将我们源代码控制中的Web.config重命名为Web.template.config,并添加了Web.template.Debug.config和Web.template.Release.config转换文件。

接下来,卸载项目文件并编辑.csproj xml文件,添加以下元素:

这将在根目录中创建一个新的Web.config文件。 太棒了!

<PropertyGroup>
  <PrepareForRunDependsOn>
    $(PrepareForRunDependsOn);
    WebConfigTransform;
  </PrepareForRunDependsOn>
</PropertyGroup>
<Target Name="WebConfigTransform">
  <Message Text="Configuration: $(Configuration): Web.template.$(Configuration).config" />
  <TransformXml Source="Web.template.config" 
                Transform="Web.template.$(Configuration).config" 
                Destination="Web.config" />
</Target>

1

找到了更好的解决方案-不需要将文件重命名为.template.config

将以下内容粘贴到您的Web Forms .csproj文件中。

  <Target Name="BeforeBuild">
    <Delete Files="$(TEMP)\Web.TEMP.config" />
    <Copy SourceFiles="Web.config" DestinationFiles="$(TEMP)\Web.TEMP.config" />
    <TransformXml 
      Source="$(TEMP)\Web.TEMP.config"
      Transform="Web.$(Configuration).config"
      Destination="Web.config" />
  </Target>

这里的问题是你创建了一种循环引用。假设你有一个插入元素的转换。第一次运行时,它将获取 web.config 中的内容并插入新元素,然后第二次运行转换时,你将插入重复的元素。此外,请记住,如果你的 web.config 在源代码控制中,你是否希望它一直在改变? - Michael
同意循环问题。虽然我们只使用“SetAttribute”转换,但它对我们非常有效。 - Vasyl Boroviak
将Web.config纳入源代码控制对我们来说非常重要。因此,这个解决方案是必要的。但我同意你的解决方案更可取。 - Vasyl Boroviak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接