Visual Studio 2015 UP1 всегда перестраивает мой проект вывода модулей C#. Это можно исправить?

У меня есть проект на C# с именем 'X', я изменил файл X.csproj и изменил <OutputType>Library</OutputType> в <OutputType>Module</OutputType>Это означает, что я теперь выводю файлы.netmodule вместо файлов.dll, и это здорово, я могу использовать сетевые модули в качестве входных данных для проектов C++/CLI.

Но Visual Studio настаивает на перекомпиляции проекта при каждой сборке, и когда я превращаю подробность вывода сборки в "диагностику", я вижу следующую строку в выводе:

Проект "Х" не обновлен. Отсутствует выходной файл "C:...\X\bin\Debug\X.exe".

Проблема, конечно, в том, что компилятор выводит X.netmodule, а не X.exe, поэтому X.exe никогда не будет найден, и, следовательно, мой проект перекомпилируется при каждой сборке. Что еще хуже, если я запускаю msbuild из командной строки на csproj, происходит правильное поведение, то есть он перестраивается только при изменении файлов в проекте.

Это заставляет меня поверить, что VS2015 [или другие] неправильно вычисляет окончательное имя выхода, потому что я указал Модуль для <OutputType>и то, что VS2015 форсирует пересборку, а не Msbuild.

Я знаю модификацию <OutputType>.csproj является нестандартным и не поддерживается, но кажется, что этот метод немного используется другими, и может показаться, что это известная проблема, возможно, с обходным путем.

Заранее спасибо.

1 ответ

Хорошо, я хотел бы услышать от других, которые понимают это, но я нашел обходной путь. Я просто добавил команду копирования в Свойства> События сборки> Командная строка события после сборки.

copy $ (TargetDir) $ (TargetName).netmodule $ (TargetDir) $ (TargetName).exe

Это означает, что когда VS ищет exe-файл (вместо.netmodule), он находит его и имеет ту же дату, что и.netmodule, поэтому логика VS о том, перестраивать или нет, должна быть исправлена.

Другие вопросы по тегам