这个信息不仅仅在可执行文件的项目中是必需的吗?
如何禁用此文件创建?
NuGet 2.8
编辑
库项目在NuGet 2.7中是例外,通过修复此问题在2.8中改变了行为:http://nuget.codeplex.com/workitem/3827 with commit:https://github.com/NuGet/NuGet2/commit/448652d028e3f01ba4022e147baaf4e1fb3f969b
khe*_*ang 12
程序集绑定重定向在类库中与在可执行项目中一样有效.
想想这个; 在构建应用程序时,编译器将如何知道要使用哪个版本的引用程序集(对于类库)?
通常这样可以正常工作,没有重定向,但是当你偶然发现装有GAC版本程序集的机器时,你可能会遇到麻烦.
我建议你阅读程序集绑定重定向文档,以便更好地理解它是什么和做什么.
NuGet添加带有重定向的app.config来帮助你,坦率地说,我没有得到关于额外的app.config的模糊,以便按预期工作.
截至今天,它将向所有项目添加重定向,但以下类型除外:
据我所知,没有办法解决这个问题.如果这是一个问题,你可以在Github上创建一个问题.
可以在此处找到添加程序集绑定重定向的源代码.
git*_*box 12
NuGet 包管理器将程序集绑定重定向添加到库项目的原因是因为有些项目类型的输出类型是库,但有特殊的机制来确保库的应用程序或 Web 配置文件将在运行。这与您可能熟悉的更典型的库用法相反,其中根本不使用库的配置文件。
例如,Azure SDK 1.8+ 中的 Azure Web 和 Worker 角色项目将生成库,但是当它们被 IIS 包装在 exe 中时,库的配置文件将被设置为该 exe 的默认值。这样,您就可以获取所有应用程序配置,而无需显式发布与包装可执行文件同名的特殊配置文件,过去是这样做的。现在构建过程输出重命名的配置文件(例如 app.config -> myWebRoleLibrary.dll.config),一切正常。
XUnit 也做了类似的事情;加载测试程序集的 app.config 而不是测试运行程序进程的 app 配置。
值得一提的是,您还可以在任何项目、库与否中手动加载配置文件。您必须确保配置文件最终位于正确的位置,但这是可能的。但是,这不太适用于绑定重定向,因为通常这些重定向仅由 CLR 中的程序集加载器使用。我想你可以挂钩AssemblyLoad但现在我们正在努力重新发明轮子。
那么,“在我的图书馆项目中是否有必要?”的答案 是也许。如果您的库项目不是 Web 或辅助角色或测试项目,并且它不手动加载配置文件,那么 app.config 可能是良性但不必要的。
至于禁用它,您只能在 Visual Studio 级别执行此操作。您可以在 VS2019 中找到该选项:工具 -> 选项... -> NuGet 包管理器 -> 常规 -> 跳过应用绑定重定向。
编译器使用正在构建的程序集的配置文件有一个原因:查找和使用supportPortability元素。
上面的链接列出了您需要该编译器选项的罕见情况,但绝大多数用户不需要。我只想说,如果您不知道是否正在使用该功能,那么您就没有使用。
它不解析配置文件的任何其他元素,包括程序集绑定重定向,它们是 NuGet 添加的元素。
MSBuild 在其几个步骤中使用应用程序配置,但重要的是不查找主要依赖项,它将以/reference:选项的形式传递给 csc.exe 。
为了找到主要引用,MSBuild(特别是 ResolveAssemblyReference 任务)将搜索公共目标文件中枚举的路径集合。如果它无法在您的 csproj 中找到显式依赖项,它将发出警告,并且可能会在编译需要依赖项时进一步出现错误。
之后,它将搜索传递依赖项。它不会将这些文件传递给编译器,而是使用它们生成需要在后续构建步骤中考虑的文件列表,例如生成许可证文件、信任信息和建议的绑定重定向。这一步确实考虑了项目的配置文件,并专门使用其绑定重定向来通知传递依赖项列表。需要注意的是,构建 exe在构建过程中不会考虑其库的 app.config 文件,并且库的 app.config 不会改变库的 dll 的生成方式。
CLR 使用配置文件来更改它定位程序集的方式。
IIS 将读取您的 web.config 文件的元素以更改您的 Web 应用程序的行为方式。例如缓存特性。
应用程序可以使用ConfigurationManager从配置文件中手动检索配置数据。
| 归档时间: |
|
| 查看次数: |
13363 次 |
| 最近记录: |