在assemblyBindig/linkedConfiguration元素中使用相对路径

11

我正在尝试将程序集重定向从 web.config 移动到外部文件中。这样做的原因是我想将绑定重定向保留在一个地方,并在调试和生产配置中都使用它。

它有点起作用,但我在指定相对路径方面遇到了困难。

<configuration>
   <!-- this works, but forces me to use the same path on dev and production machines -->
   <linkedConfiguration href="file://c:\data\web.runtime.config"/>

   <!-- none of those works -->
   <linkedConfiguration href="file://web.runtime.config"/>
   <linkedConfiguration href="file://..\web.runtime.config"/>
   <linkedConfiguration href="file://~/web.runtime.config"/>

</configuration>

我希望将 web.runtime.config 与 web 应用程序的其他文件放在同一个文件夹中。是否可以在 linkedConfiguration 元素中指定相对路径?

更多信息: 我已经在 VS 2015 中使用 IIS Express 和 ASP MVC 应用程序进行了测试。使用 SysInternals Process Monitor 监控文件访问时,相对路径似乎解析为 \\web.runtime.config(无效的网络路径),而使用绝对路径时不会添加前导 \\


你找到解决方案了吗? - Andrei Orlov
1
不是的。我使用了另一种方法。绑定重定向在单个源文件中,并且使用 web.config 转换生成了调试和生产配置。 - Martin Vobr
你能展示一下 RuntimeConfiguration.xml 的结构吗?我也遇到了同样的问题,但不确定我的 RuntimeConfiguration.xml 是否正确。 - cezarypiatek
你能展示一下 web.runtime.config 的内容吗?我在尝试正确地构建这个文件,但遇到了困难。 - Nikhil
2个回答

4
我找到了一种指定相对路径的方法。
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <linkedConfiguration href="file:./RuntimeConfiguration.xml"/>
</assemblyBinding>

2
不确定为什么它被踩了,因为它实际上是有效的。你甚至可以删除"./"并使用file:bindings.config - user1641529
@JoshMouch 你找到解决方案了吗?我们现在使用asp.net core 2.1也遇到了完全相同的问题。 - crazy_crank
我的解决方案是在项目开头添加一些代码,使您不再需要任何AssemblyBindings(或者至少大部分)。它处理程序集解析事件并告诉它只使用BIN中的任何版本。参见:https://dev59.com/7XRC5IYBdhLWcg3wW_lk#55246142 - Josh Mouch
1
相对路径适用于普通的app.config,但不适用于web.config。我发现@JoshMouch的方法非常有效。 - bitmountain

1

文件web.runtime.config必须位于bin目录中。

使用href="file:web.runtime.config"可以正常工作。


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