Microsoft.Owin.Host.HttpListener 未复制到引用项目的构建输出

问题描述 投票:0回答:3

我正在从同一解决方案中的另一个项目引用 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 一起复制到预期的引用项目输出。

visual-studio reference owin self-hosting copy-local
3个回答
6
投票

在团队成员的帮助下,我找到了问题的根源。编译器省略了 HttpListener dll,因为它没有在项目 A 或 B 的代码中的任何地方显式使用。因此,我在项目 B 的代码中添加了以下行:

//Dummy line to bypass the optimization.
Trace.TraceInformation(typeof(Microsoft.Owin.Host.HttpListener.OwinHttpListener).FullName);

这创建了对 HttpListener.dll 的实际依赖,并且它开始包含在项目 A 的输出中。


1
投票

是的,这种愚蠢的引用优化是完全愚蠢的,并且对于反射来说完全不成熟。

就我而言,我有与您相同的问题并选择:

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

0
投票

同样的事情发生在我身上,但我注意到它只在编译到Release时发生,而在Debug中,DLL被复制。

© www.soinside.com 2019 - 2024. All rights reserved.