必须将NuGet-dll.config更改复制到exe.config

本文关键字:config 复制 exe NuGet-dll | 更新日期: 2023-09-27 18:00:06

如果我将NuGet包引用添加到DLL项目MyLib(即输出类型类库),包管理器有时会在项目中创建一个app.config(例如使用bindingRedirect),该app.config将构建为MyLib.DLL.config.Microsoft。例如,Owin 2.1.0就是这样做的。

当我的Windows桌面应用程序加载MyLib.dll时,它会忽略MyLib.dll.config中的bindingRedirect,我会得到一个FileLoadException。如果手动将bindingRedirect复制到EXE项目的app.config,我可以解决这个问题。

在app.config文件之间手动复制粘贴真的是让NuGet-bindingRedirect工作的唯一方法吗

考虑到NuGet应该自动处理依赖关系,这似乎非常乏味且容易出错。

必须将NuGet-dll.config更改复制到exe.config

这是唯一的方法:类库项目中的app.config文件本质上只是示例代码,如果需要,可以将其复制到主应用程序的配置文件中。

在bindingRedirect的情况下,我认为它只在两种情况下是必要的:

  1. 如果有多个dll访问MyLib程序集的不同版本。在这种情况下,您需要明确决定要使用哪个版本。

  2. 如果主应用程序的程序集包含引用旧版本MyLib程序集的配置元素。在这种情况下,您可以执行以下操作之一:

    • 更新主配置文件中的版本
    • 将bindingRedirect添加到主配置文件
    • 将Nuget包添加到主应用程序项目中,在这种情况下,它可能会为您添加bindingRedirect

特定于包的配置文件所做的只是向您显示特定于该包的配置。您可能想也可能不想将其放入实际的配置文件中,出于您的目的,您可能需要对其进行推特处理(EntityFramework或log4net就是很好的例子)。在将包安装到类库中的情况下,配置文件根本没有意义,需要将该配置移动到适当的可执行程序app.config中——这怎么可能自动化呢。

在nuget之前,您可以从某处下载dll,然后按照说明设置必要的配置。这绝对是一个改进。

总之,是的,如果你需要的话,你确实需要复制它,而且它确实有意义。

还有更好的方法。在添加NuGet包引用之前,我只需要添加一些本地项目引用。

当我最初添加Microsoft时。Owin NuGet对MyLib的引用,我还没有添加对MyApp(又名EXE项目)的MyLib引用。使用MyApp中的MyLib引用,我卸载了Microsoft。Owin NuGet包,然后添加了Microsoft。回到MyLib。Bada-bing-Bada-boom。bindingRedirect被自动添加到MyApp的app.config文件中。

因此,在创建新的类库时,在将NuGet包引用添加到新库之前,显然应该将新的库引用添加到现有项目中。