我在GitHub上有一個OSS項目,使用Visual Studio 2017在AppVeyor CI上針對.NET 4.5構建。該解決方案構建了一個COM加載項,該擴展擴展了一個著名的可怕的舊版Win32 IDE,并且我們已經確定,我們需要運行的最早Windows版本是Vista(因此,.net 4.5及其async/await出色之處)。到現在為止還挺好?,F在,建立一個COM可見的.net DLL是一回事,而建立一個在進程內運行的COM加載項則是另一回事:我們不能依賴.net,該加載項托管在最近20年更新的模糊應用程序中。垃圾收集不確定地清理RCW,因此很容易意外泄漏COM對象并引入嚴重的運行時(實際上是拆機)問題,因此,核心貢獻者之一是在解決方案中添加Roslyn分析器項目,這將有助于新老參與者這樣,通過防止會導致這種泄漏的構建。因此,解決方案中的所有.csproj文件都得到了以下差異:+ <ItemGroup>+ <Analyzer Include="..\RubberduckCodeAnalysis\RubberduckCodeAnalysis\bin\Release\netstandard1.3\RubberduckCodeAnalysis.dll" />+ </ItemGroup>因此,需要先構建分析器項目。.sln差異顯示了新分析器項目的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):error:Project'C:\ projects \ rubberduck \ RubberduckCodeAnalysis \ RubberduckCodeAnalysis \ RubberduckCodeAnalysis.csproj'目標為'netstandard1.3'。面向'.NETFramework,Version = v4.5'的項目無法引用它。[C:\ projects \ rubberduck \ Rubberduck.Parsing \ Rubberduck.Parsing.csproj]在本地調試版本中,可以手動構建分析器項目,然后可以很好地構建和分析解決方案的其余部分,而無需了解項目的依賴性。不過,在AppVeyor CI構建服務器上,分析器項目只是解決方案一部分的DLL,如果我們不告訴它首先構建,則將找不到分析器DLL,也不會構建解決方案。看起來我被卡住了,無論我從哪一邊看問題。我的用戶都是Win32用戶,我不在乎可移植性。但是,我確實希望在Windows Vista上運行,所以有沒有辦法讓我可以在CI上構建它而無需將項目重新定位到.NET Standard 1.3?
1 回答

守著星空守著你
TA貢獻1799條經驗 獲得超8個贊
如果查看.NET Standard的文檔,則會看到1.3版與.NET Framework 4.6兼容:
您說需要支持Windows Vista,這很幸運,因為Windows Vista中支持的.NET的最新版本(需要SP2)是.NET Framework 4.6:.NET Framework系統要求。
因此,我建議您將所有項目都更新到.NET Framework 4.6,并且不應再看到任何兼容性問題。
- 1 回答
- 0 關注
- 209 瀏覽
添加回答
舉報
0/150
提交
取消