Visual Studio перестраивает проекты при переходе от отладки к выпуску и наоборот, когда выбрана опция документации XML - PullRequest
0 голосов
/ 07 сентября 2018

У меня очень похожая проблема, чем описано в следующем вопросе Проекты Visual Studio C # вынуждают пересобирать при переключении с отладки на выпуск и наоборот .

У меня есть два проекта на C #, и у одного есть ссылка на проект на другой. Если я собираю (F6) в Debug и чем я строю (F6) в Release. Если я теперь переключусь обратно на Отладку и сборку (F6), это должно быть обновлено.

Это действительно так. Итак, я вижу, что в папке bin / Debug дата файла и версия сборки не меняются.

Но если я включу файл документации XML для проекта, в котором есть ссылка на проект, в разделе Свойства проекта / Сборка / Вывод для обеих конфигураций (Отладка и Выпуск), то проекты будут перестраиваться каждый раз, когда я переключаюсь с Отладка на Выпуск или наоборот.

Чтобы воссоздать проблему:

  1. Нажмите File / New Project...
  2. Создать новый Visual C# -> Console Application. Оставьте сгенерированный код как есть.
  3. Щелкните правой кнопкой мыши новое решение в обозревателе решений и выберите Add -> New Project...
  4. Выберите Visual C# -> Class Library. Оставьте сгенерированный код как есть.
  5. Щелкните правой кнопкой мыши на ConsoleApplication1 в обозревателе решений и выберите Add Reference...
  6. Установите флажок рядом с ClassLibrary1 в Solution -> Projects и нажмите OK.
  7. Включите XML documentation file для ConsoleApplication1 в Project Properties / Build / Output для обеих конфигураций (Debug и Release)
  8. Сборка проекта в конфигурации Debug. Он строит, как и ожидалось.
  9. Переключитесь на Release конфигурацию и выполните сборку заново. Он строит, как и ожидалось.
  10. Вернитесь к Debug и выполните сборку заново. Он строит , и не должен. Он уже построен, верно? Все, что мы сделали, это изменили выбор целевой конфигурации.

Я получаю следующий результат сборки:

1>------ Build started: Project: ConsoleApplication1, Configuration: Debug Any CPU ------
1>Build started 07.09.2018 13:46:43.
1>GenerateTargetFrameworkMonikerAttribute:
1>Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
1>CoreCompile:
1>  C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /platform:anycpu32bitpreferred /errorreport:prompt /warn:4 /doc:bin\Debug\ConsoleApplication1.XML /define:DEBUG;TRACE /errorendlocation /preferreduilang:en-US /highentropyva+ /reference:H:\CSharp\TestRebuild\ClassLibrary1\bin\Debug\ClassLibrary1.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\ConsoleApplication1.exe /subsystemversion:6.00 /target:exe /utf8output Program.cs Properties\AssemblyInfo.cs "C:\Users\WO\AppData\Local\Temp\.NETFramework,Version=v4.5.AssemblyAttributes.cs" obj\Debug\\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs obj\Debug\\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs obj\Debug\\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
1>_CopyAppConfigFile:
1>Skipping target "_CopyAppConfigFile" because all output files are up-to-date with respect to the input files.
1>CopyFilesToOutputDirectory:
1>  Copying file from "obj\Debug\ConsoleApplication1.exe" to "bin\Debug\ConsoleApplication1.exe".
1>  ConsoleApplication1 -> H:\CSharp\TestRebuild\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:00.41
========== Build: 1 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========

Если XML documentation file выключен, я получаю следующий вывод сборки (он пропускает CoreCompile как следует):

1>------ Build started: Project: ConsoleApplication1, Configuration: Debug Any CPU ------
1>Build started 07.09.2018 13:50:17.
1>GenerateTargetFrameworkMonikerAttribute:
1>Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
1>CoreCompile:
1>Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
1>_CopyAppConfigFile:
1>Skipping target "_CopyAppConfigFile" because all output files are up-to-date with respect to the input files.
1>CopyFilesToOutputDirectory:
1>  ConsoleApplication1 -> H:\CSharp\TestRebuild\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:00.07
========== Build: 1 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========

Это ошибка? Есть ли обходной путь?

1 Ответ

0 голосов
/ 10 сентября 2018

Visual Studio Перестраивает проекты при переходе от отладки к выпуску и наоборот, когда выбран вариант документации XML

Да, это известная проблема для Visual Studio 2013 и Visual Studio 2015. Это просто слабый шок, который не повлияет на результаты нашей сборки, за исключением дополнительного времени выполнения 0,00001 секунды.

И эта проблема была исправлена ​​в Visual Studio 2017 версии 15.6 . Я протестировал его на последней версии в Visual Studio 2017 15.8.2 (Текущая версия), он работает как положено.

Вы можете найти UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)", который был добавлен к задаче копирования в цели CopyFilesToOutputDirectory в файле Microsoft.Common.CurrentVersion.targets:

<Copy
    SourceFiles="@(IntermediateAssembly)"
    DestinationFolder="$(OutDir)"
    SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
    OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
    Retries="$(CopyRetryCount)"
    RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
    UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
    UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)"
    Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' != 'true'"
        >

  <Output TaskParameter="DestinationFiles" ItemName="MainAssembly"/>
  <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>

</Copy>

Если эта ошибка влияет на вашу работу, вы можете обновить Visual Studio до 2017 года.

Надеюсь, это поможет.

...