Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在我的程序集中为app.config或硬代码配置值使用自定义名称_C#_.net_Dll_Com_Interop - Fatal编程技术网

C# 如何在我的程序集中为app.config或硬代码配置值使用自定义名称

C# 如何在我的程序集中为app.config或硬代码配置值使用自定义名称,c#,.net,dll,com,interop,C#,.net,Dll,Com,Interop,我用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”构建的 运行时,如果没有额外的 配置信息 如果我在myapp.exe旁边创建一个名为“myapp.exe.config”的

我用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”构建的 运行时,如果没有额外的 配置信息

如果我在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属性,以避免完全使用配置文件吗?

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

项目->项目属性中,选择生成事件选项卡并编辑生成后事件命令行以重命名.config文件,例如:

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

我可能是错的,但我只是想,如果您在.NET2.0框架中重新编译.NET4.0程序集,那么.backward兼容性就存在了。然后,我认为mixedmode程序集的这个错误应该消失,而您可能不需要这个配置。

我使用了的想法:


如果MyApp.exe经常更新,您能说服它重命名或删除吗 甚至自动生成配置文件,在其 首次调用任何.NET代码?-1月12日17:38


这对我没什么帮助。Myapp.exe不是.NET,它不是在Visual Studio中生成的。它的构建过程与mydll.dll的构建过程没有连接。另外,我不想在每次新的应用程序迭代中都附带一个新的app.config文件,因为它只引用mydll.dll,不会经常更新。为什么必须在文件名中包含该版本?这是客户端的策略。如果MyApp.exe经常更新,你能说服它在第一次调用任何.NET代码之前重命名甚至自动生成具有匹配名称的配置文件吗?这似乎是一个极端的解决方法,但这将解决我所有的问题。这是一个有趣的想法。我认为这是一个好主意,但我已经尝试过了,而且似乎不起作用。将项目切换到2.0后,当我将3rdpdll.dll添加到引用中时,会出现以下错误:“3rdpdll.dll或其一个或多个依赖项需要项目中指定的.NET Framework的更高版本。”。不知道为什么。如果我切换到3.0,我没有这个问题,但在启动myapp.exe时,我会得到“该程序集不允许部分受信任的调用方”。这同样需要app.config设置来解决。