我正在从同一解决方案中的另一个项目引用 Visual Studio 解决方案中的一个项目。被引用的项目(项目 B)具有 Microsoft.Owin.Host.HttpListener nuget 包,因此其中引用了 .dll。正在构建引用项目 B(项目 A)的项目。输出文件夹获取项目 B 中引用的所有 dll(Microsoft.Owin.Host.HttpListener.dll 除外),即使它被标记为复制本地 - true。
Microsoft.Owin.Host.HttpListener.dll 是迄今为止我所遇到的唯一一个拒绝作为 MSBuild 的 _CopyFilesMarkedCopyLocal 步骤的一部分复制到项目 A 的构建输出(无论设置如何)的问题。
我尝试将其添加到 app.config 中的条目中,但没有帮助。
我已经安排了展示引用问题的示例项目并将其上传到 GitHub here。
您可以随意调整设置。
在问这个问题之前,我已经查看了 Stackoverflow 中的相关问题,但它们没有得到解答或不相关。
请给我一个提示,如何将 .HttpListener.dll 与其他 .dll 一起复制到预期的引用项目输出。
在团队成员的帮助下,我找到了问题的根源。编译器省略了 HttpListener dll,因为它没有在项目 A 或 B 的代码中的任何地方显式使用。因此,我在项目 B 的代码中添加了以下行:
//Dummy line to bypass the optimization.
Trace.TraceInformation(typeof(Microsoft.Owin.Host.HttpListener.OwinHttpListener).FullName);
这创建了对 HttpListener.dll 的实际依赖,并且它开始包含在项目 A 的输出中。
是的,这种愚蠢的引用优化是完全愚蠢的,并且对于反射来说完全不成熟。
就我而言,我有与您相同的问题并选择:
using Microsoft.Owin.Host.HttpListener;
...
_log.Debug("Loading type: "+ typeof(OwinHttpListener) + "..."); // Hack to force copy of Microsoft.Owin.Host.HttpListener.dll on target referencing project
同样的事情发生在我身上,但我注意到它只在编译到Release时发生,而在Debug中,DLL被复制。