[英]Can I have an analyzer on a .net 4.5 project?
我在GitHub上有一個OSS項目是在AppVeyor CI上用Visual Studio 2017構建的.NET 4.5(不是預覽的東西,只是2017)。
該解決方案構建了一個COM加載項,擴展了一個着名的可怕的傳統Win32 IDE,我們已經確定我們需要運行的最早的Windows版本是Vista(所以,.net 4.5及其async/await
awesomeness)。
到現在為止還挺好。 現在構建一個COM可見的.net DLL是一回事,構建一個在進程中運行的COM加載項,托管在20年前最后一次更新的繁瑣應用程序中,是另一個:我們不能依賴.net垃圾收集清理RCW是不確定的,因此很容易意外地泄漏COM對象並引入嚴重的運行時(實際拆解)問題,因此核心貢獻者之一是將一個Roslyn分析器項目添加到解決方案中 ,這將有助於貢獻者新舊通過防止可能引入這種泄漏的構建。
所以解決方案中的所有.csproj文件都得到了這個差異:
+ <ItemGroup>
+ <Analyzer Include="..\RubberduckCodeAnalysis\RubberduckCodeAnalysis\bin\Release\netstandard1.3\RubberduckCodeAnalysis.dll" />
+ </ItemGroup>
因此,需要首先構建分析器項目。
有.sln diff顯示新分析器項目的GUID:
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RubberduckCodeAnalysis", "RubberduckCodeAnalysis\RubberduckCodeAnalysis\RubberduckCodeAnalysis.csproj", "{A2B4E037-A446-41B9-A304-F91C7C7A6972}"
+EndProject
然后.sln diff顯示解決方案的一個項目以及如何將分析器添加為依賴項以控制構建順序 :
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rubberduck.Parsing", "Rubberduck.Parsing\Rubberduck.Parsing.csproj", "{A4A618E1-CBCA-435F-9C6C-5181E030ADFC}"
ProjectSection(ProjectDependencies) = postProject
+ {A2B4E037-A446-41B9-A304-F91C7C7A6972} = {A2B4E037-A446-41B9-A304-F91C7C7A6972}
{8CE35EB3-8852-4BA1-84DD-DF3F5D2967B0} = {8CE35EB3-8852-4BA1-84DD-DF3F5D2967B0}
EndProjectSection
EndProject
這讓我想到AppVeyor構建錯誤,我被困在:
C:\\ Program Files(x86)\\ Microsoft Visual Studio \\ 2017 \\ Community \\ MSBuild \\ 15.0 \\ Bin \\ Microsoft.Common.CurrentVersion.targets(1603,5):錯誤:項目'C:\\ projects \\ rubberduck \\ RubberduckCodeAnalysis \\ RubberduckCodeAnalysis \\ RubberduckCodeAnalysis.csproj'目標'netstandard1.3'。 它不能被針對“.NETFramework,Version = v4.5”的項目引用 。 [C:\\項目\\ rubberduck \\ Rubberduck.Parsing \\ Rubberduck.Parsing.csproj]
在本地調試版本中,可以手動構建分析器項目,然后可以很好地構建和分析解決方案的其余部分,而無需破解項目依賴性。
在AppVeyor CI構建服務器上,分析器項目只是一個DLL,它是解決方案的一部分,如果我們不告訴它首先構建,那么將找不到分析器DLL並且解決方案將無法構建。
看起來我卡住了,無論我看哪個問題。 我的用戶都是Win32用戶,我不關心可移植性; 我確實喜歡在Windows Vista上運行,所以有沒有辦法在沒有將項目重新定位到.NET Standard 1.3的情況下構建CI?
如果查看.NET Standard的文檔 ,您將看到1.3版與.NET Framework 4.6兼容:
你說你需要支持Windows Vista,你很幸運,因為Windows Vista支持的最新版本的.NET(需要SP2)是.NET Framework 4.6: .NET Framework系統要求 。
因此,我建議您將所有項目更新到.NET Framework 4.6,您不應再看到任何兼容性問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.