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

守著星空守著你
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果查看.NET Standard的文檔,則會(huì)看到1.3版與.NET Framework 4.6兼容:
您說(shuō)需要支持Windows Vista,這很幸運(yùn),因?yàn)閃indows Vista中支持的.NET的最新版本(需要SP2)是.NET Framework 4.6:.NET Framework系統(tǒng)要求。
因此,我建議您將所有項(xiàng)目都更新到.NET Framework 4.6,并且不應(yīng)再看到任何兼容性問(wèn)題。
- 1 回答
- 0 關(guān)注
- 198 瀏覽
添加回答
舉報(bào)
0/150
提交
取消