Problem ze statyczną analizą kodu a nieprawidłowymi wersjami bibliotek
Podczas pracy nad projektem i uruchomieniu statycznej analizy kodu w Visual Studio 2008 (Code Analysis 2008/FxCop) napotkałem bardzo intrygujący błąd:
CA0058 : The referenced assembly 'EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' could not be found.
This assembly is required for analysis and was referenced by: 'MojProjekt.dll', 'VSLangProj.dll'.
Należy w tym miejscu oczywiście zaznaczyć, że faktycznie projekt jest zależny od wymienionej VSLangProj.dll oraz EnvDTE.dll. Tyle, że ta ostatnia jest dołączana w wersji 8.0. Cały kłopot w tym, że wymagana wersja 7.0.3300, nie istnieje nigdzie w systemie. Wpływu na VSLangProj nie mamy żadnego, bo pochodzi on z publicznego SDK do Visual Studio, a naszym zadaniem nie jest przecież ’naprawa’ tej sytuacji, a analiza własnego kodu źródłowego!, zatrzymana grubiańsko przez niezgodność skompilowanych bibliotek kogoś innego. Dodatkowo projekt działa i jakoś potrafi się odnaleźć w run-time’ie. Magia.
Zmiana właściwości referencji tak, aby wyłączyć wymaganie ‘Specific Version’, nie przyniosła żadnego rezultatu. W sumie można powiedzieć, że logiczne, bo przecież EnvDTE 7.0.3300 wymagany jest pośrednio przez VSLangProj.
Rozwiązanie:
- Przejść do lokalizacji:
%ProgramFiles(x86)%\Microsoft Visual Studio 9.0\Team Tools\Static Analysis\FxCop
- Otworzyć w edytorze tekstowym: FxCopCmd.exe.config
- Zamienić wartość ustawienia AssemblyReferenceResolveMode na StrongNameIgnoringVersion
Od tej pory komunikat o błędzie zniknie bezpowrotnie.
Na załączonym obrazku przestawiam, jakie są jeszcze inne dostępne opcje, jeśli ktoś kiedyś będzie potrzebował.