Visual Studioは、デバッグからリリースに切り替えるときにプロジェクトを再構築し、オプションのXMLドキュメントが選択されている場合はその逆になります。

ウォルミッチ

次の質問で説明されているものと非常によく似た問題があります。VisualStudioC #プロジェクトは、デバッグからリリースに、またはその逆に切り替えるときに強制的に再構築します。

私は2つのプロジェクトをC#しており、一方にはもう一方へのプロジェクト参照があります。デバッグでビルド(F6)し、リリースでビルド(F6)した場合。ここでデバッグとビルド(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. 横にあるボックスをチェックClassLibrary1Solution> -ProjectsとヒットOK
  7. 上のスイッチXML documentation fileのためのConsoleApplication1プロジェクトの下でProperties/ Build/Output両方の構成のための(DebugRelease
  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 ==========

これはバグですか?回避策はありますか?

Leo Liu-MSFT

Visual Studioは、デバッグからリリースに切り替えるときにプロジェクトを再構築し、オプションのXMLドキュメントが選択されている場合はその逆になります。

はい、これはVisual Studio2013およびVisualStudio 2015の既知の問題です。これは、0.00001秒の余分な実行時間を除いて、ビルド結果に影響を与えないわずかなショックです。

また、この問題はVisual Studio2017バージョン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>

このバグが作業に影響する場合は、VisualStudioを2017に更新できます。

お役に立てれば。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ