28

VS 2015 にアップグレードして以来、私のチームはランダムな奇妙なことを経験しており、現在 Microsoft で解決されていると確信しています。非常に厄介な問題の 1 つは、特に分岐後に、プロジェクトの参照が失われているように見えることです。私は昨日、ソリューションの新しいブランチに取り組み始めましたが、型が認識されておらず、名前空間の使用が不要であると引用されていることがわかりました (それらは突然認識されなくなった型のためだったため)。

プロジェクト内の参照には、参照の問題を示すアイコンは表示されませんでしたが、機能するかどうかを確認するために、プロジェクト参照を削除して再度追加したところ、そのタイプがもう一度認識されました。

もちろん、これによりプロジェクト ファイルが更新されたので、どのような変更が行われたかを確認しました。参照を検出できなかったプロジェクトと検出できるようになったプロジェクトの唯一の違いは、GUID の英字が小文字から大文字に変更されたことです。例えば:

古い壊れたリファレンス:

<ProjectReference Include="path/redacted">
    <Project>{95d34b2e-2ceb-499e-ab9e-b644b0af710d}</Project>
    <Name>Project.Name.Redacted</Name>
</ProjectReference>

新しい修正された参照:

<ProjectReference Include="path/redacted">
    <Project>{95D34B2E-2CEB-499E-AB9E-B644B0AF710D}</Project>
    <Name>Project.Name.Redacted</Name>
</ProjectReference>

これが起こっている理由と、参照を手動で削除して再追加することなく (そしてすべてのプロジェクト ファイル GUID を大文字に変換することなく) 修正する方法を探しています。

これらの「壊れた」参照はビルドを壊すものではなく、ビルド エラーではなく、IntelliSense エラーとしてのみエラー一覧に表示されることに注意してください。したがって、参照は実際には壊れているわけではなく、単に IntelliSense が壊れているだけです (これは間違いなく悪いことです?!)。

4

5 に答える 5

6

プロジェクトシステムにバグがあるようです。この PowerShell はプロジェクトをループし、すべての参照を大文字にします。

#FixGuids

get-childitem -recurse | ?{ @('.sln', '.csproj', '.vbproj') -contains $_.Extension } | %{
   [regex]::Replace((gc -raw $_.FullName), '[{(]?[0-9A-Fa-f]{8}[-]?([0-9A-Fa-f]{4}[-]?){3}[0-9A-Fa-f]{12}[)}]?', { return ([string]$args[0]).ToUpperInvariant() }) |
      Out-File $_.FullName -Encoding "UTF8
}

それは非常に単純です。参照以外の目的でプロジェクトの GUID に依存している場合は、GUID をよりインテリジェントなものに変更することをお勧めします。

于 2016-04-04T18:05:37.270 に答える