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 о том, перестраивать или нет, должна быть исправлена.