【发布时间】:2012-02-08 22:41:05
【问题描述】:
我用 C# (mydll.dll) 编写了一个访问第三方 dll (3rdpdll.dll) 的类库。 Mydll.dll 反过来通过 COM 互操作被非 .NET 进程 (myapp.exe) 使用。
Mydll.dll 是 .NET 4.0 但 3rdpdll.dll 是使用 v2.0.50727 构建的,所以当我运行 myapp.exe 时,我收到以下错误:
混合模式程序集是针对版本“v2.0.50727”构建的 运行时并且不能在没有额外的 4.0 运行时中加载 配置信息...
如果我在 myapp.exe 旁边创建一个名为“myapp.exe.config”的文件,其中包含以下 XML,则会解决此问题:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
问题是 myapp.exe 更新很多,并且名称中包含版本信息,例如 myapp.v2.063.exe。这将需要在应用程序的每次新迭代时重命名配置文件(myapp.v2.063.exe.config )。
我有没有办法为配置文件声明一个静态名称,例如“app.config”,这样它就不需要与 myapp.exe 的每次新迭代一起重命名和重新发布?或者更好的是,我可以在 mydll.dll 中对 useLegacyV2RuntimeActivationPolicy 属性进行硬编码,以便完全避免使用配置文件吗?
【问题讨论】:
-
为什么必须在文件名中包含版本?
-
这是客户的政策。
-
如果 MyApp.exe 得到大量更新,您能否说服它在第一次调用任何 .NET 代码之前重命名甚至自动生成具有匹配名称的配置文件?
-
似乎是一种极端的解决方法,但它会解决我所有的问题。这是一个有趣的想法。