【问题标题】:How to use a custom name for app.config or hard-code config values in my assembly如何在我的程序集中为 app.config 或硬编码配置值使用自定义名称
【发布时间】: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 代码之前重命名甚至自动生成具有匹配名称的配置文件?
  • 似乎是一种极端的解决方法,但它解决我所有的问题。这是一个有趣的想法。

标签: c# .net dll com interop


【解决方案1】:

在 Visual Studio 2010 中,您可以使用以下命令重命名 app.config 文件:

Project -> Project Properties 中,选择 Build Events 选项卡并编辑构建后事件命令行以重命名 .config文件,例如:

rename "$(TargetDir)$(TargetFileName).config" "$(TargetFileName).versionX"

【讨论】:

  • 这对我没有帮助。 Myapp.exe 不是 .NET,它不是在 Visual Studio 中构建的。它的构建过程与 mydll.dll 的构建过程无关。此外,我不希望每次应用程序的新迭代都发布一个新的 app.config 文件,因为它只引用 mydll.dll,不会经常更新。
【解决方案2】:

我可能是错的,但我只是想,如果你在 .net 2.0 框架中重新编译你的 .net 4.0 程序集,因为存在 .backward 兼容性。然后我想这个混合模式组装的错误应该消失,你可能不需要这个配置。

【讨论】:

  • 我认为这是个好主意,但我已经尝试过了,但似乎不起作用。将我的项目切换到 2.0 后,当我将 3rdpdll.dll 添加到我的引用中时,我收到以下错误:“3rdpdll.dll 或一个或其依赖项需要项目中指定的 .NET Framework 的更高版本。”。不知道为什么。如果我切换到 3.0,我就没有这个问题,但我确实得到“那个程序集不允许部分受信任的调用者”。启动 myapp.exe 时。这又需要一个 app.config 设置来解决。
【解决方案3】:

我同意Joe的想法:

如果 MyApp.exe 更新很多,你能说服它重命名或 甚至在其之前自动生成具有匹配名称的配置文件 第一次调用任何 .NET 代码? – Joe 1 月 12 日 17:38

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2016-05-02
    • 1970-01-01
    • 2010-10-20
    • 2011-11-04
    相关资源
    最近更新 更多