在app.config中为类库做绑定重定向会做什么吗?

Tom*_*rek 43 .net c# app-config nuget assembly-binding-redirect

我经常使用的VS解决方案包括一个可执行项目(控制台应用程序,Web应用程序)和许多可执行文件引用的类库项目.

在使用NuGet并安装软件包时,通常会app.config为每个项目创建一个文件,通常只包含合并重定向列表,这些重定向合并了引用程序集的版本.有时候会有一些特定于第三方库的内容(比如Entity Framework配置部分),但是现在让我们把它放在一边.

当我构建解决方案并使用主可执行项目的二进制文件时,我会看到构建输出中的所有类库项目程序集以及相应的*.config文件(app.config文件AssemblyName.config在构建时重命名为).

启动主可执行文件时,类库程序集的配置文件是否有效?或者只是app.config在这种情况下具有效果的可执行文件?如果在某些类库项目上设置了一些绑定重定向,并在主可执行项目上设置了一些不同的绑定重定向,这些如何组合,哪些优先?

我试图在网上研究这个,从我读过的内容来看,它看起来像app.config非可执行程序集的文件是无用的(关于绑定重定向).有人可以确认这一点或详细说明这个主题吗?

如果是这样的话,app.config如果它们只包含绑定重定向,那么实际上不希望NuGet在类库中创建这些文件吗?我觉得NuGet不应该为类库项目创建那些绑定重定向,因为它只会增加对实际应用的设置的混淆.


我在这个主题上发现了这些现有的Stack Overflow问题,但是他们接受的答案实际上是矛盾的,即使它们被标记为彼此重复.

第一个问题的接受答案提到app.config文件实际上是在编译时使用的,这意味着它们可能有效.像MSDNMSBuild源代码这样的来源被引用作为它在编译时使用的证明.不幸的是,我对MSBuild的熟练程度不足以理解它是如何被使用的,以及它是否真的是一个有效的参数.

任何人都可以描述一个示例场景来证明带有绑定重定向的类库的app.config可以做什么吗?

小智 5

我有多个具有类似设置的应用程序 - Web 应用程序引用多个库项目,每个项目都有自己的 nuget 包等,根据我的个人经验,在运行时不考虑库项目中的程序集绑定。

根应用程序(web/console)中指定的 web 或 app 配置的绑定是唯一重要的。我所有的库项目都将 app.config 文件的“复制到输出目录”设置为“不复制”——这样我的输出文件夹就不会被 dll 及其配置文件弄乱。

这是一个链接,说明如何加载程序集以及在哪里搜索它以及它的顺序。他们在文章中没有提到单个项目配置文件。

希望有帮助。


Jeh*_*hof 1

通常只有一个配置文件,那就是可执行文件的配置文件(.exe.config、web.config)。

任何程序集重定向都必须放置在可执行文件的配置文件中。

dll的配置文件需要使用ConfigurationManager类手动加载。另请参阅这个问题相当于库(DLL)的“app.config”

  • @我唯一能想到的是在单元测试期间可能需要。单元测试运行器将主要加载被测试的 dll 和 dll 的配置文件(如果存在)。我认为跑步者也会应用重定向 (3认同)