Microsoft.Owin.Host.HttpListener не копируется в выходные данные сборки ссылающихся проектов
Я ссылаюсь на один проект в решении Visual Studio из другого проекта в том же решении. Проект, на который делается ссылка (проект B), имеет пакет nuget Microsoft.Owin.Host.HttpListener и, следовательно, DLL-файл, на который есть ссылка. Проект, который ссылается на проект B (Проект A) строится. Выходная папка получает все те DLL-файлы, на которые есть ссылки в Project B, кроме Microsoft.Owin.Host.HttpListener.dll, даже если она помечена как Copy Local - true.
Microsoft.Owin.Host.HttpListener.dll - единственный, с которым я сталкивался до сих пор, который отказывается копироваться в выходные данные сборки Project A как часть шага _CopyFilesMarkedCopyLocal MSBuild независимо от настроек.
Я пытался добавить его в записи в app.config, это не помогло.
Я организовал пример проекта, демонстрирующий проблему со ссылками, и загрузил его на GitHub здесь.
Вы можете свободно играть с настройками.
Я проверил соответствующие вопросы в Stackru перед тем, как задавать этот вопрос, и на них нет ответов или они не связаны.
Пожалуйста, дайте мне подсказку, как получить файл.HttpListener.dll, который будет скопирован вместе с другими файлами.dll в выходные данные проектов, как и ожидалось. Спасибо.
2 ответа
С помощью членов моей команды я смог добраться до сути проблемы. Компилятор пропускал HttpListener dll, поскольку он явно не использовался нигде в коде проектов A или B. Таким образом, я добавил следующую строку в код проекта B:
//Dummy line to bypass the optimization.
Trace.TraceInformation(typeof(Microsoft.Owin.Host.HttpListener.OwinHttpListener).FullName);
Это создало фактическую зависимость от HttpListener.dll, и оно начало включаться в выходные данные проекта А.
Да, эта глупая оптимизация ссылок совершенно глупа и совершенно незрела в отношении отражения.
В моем случае у меня та же проблема, что и у вас, и я выбрал:
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