我在GitHub上有一个OSS项目,它是在AppVeyor CI上用Visual Studio 2017构建的.NET 4.5(不是预览的东西,只是2017年)。
该解决方案构建了一个COM加载项,扩展了一个着名的可怕的传统Win32 IDE,我们已经确定我们需要运行的最早的Windows版本是Vista(所以,.net 4.5及其{{ 1}} awesomeness)。
到目前为止,这么好。现在构建一个COM可见的.net DLL是一回事,构建一个在进程中运行的COM加载项,托管在20年前最新更新的繁琐应用程序中,是另一个:我们不能依赖.net垃圾收集清理RCW的不确定性,因此很容易意外泄漏COM对象并引入严重的运行时(实际拆解)问题,因此其中一个核心贡献者是adding a Roslyn analyzer project to the solution && #39; s帮助贡献者老人和通过防止可能引入这种泄漏的构建来实现这一点。
所以解决方案中的所有.csproj文件都得到了这个差异:
async/await
因此需要首先构建分析器项目。
显示新分析器项目的GUID的.sln diff:
+ <ItemGroup>
+ <Analyzer Include="..\RubberduckCodeAnalysis\RubberduckCodeAnalysis\bin\Release\netstandard1.3\RubberduckCodeAnalysis.dll" />
+ </ItemGroup>
然后.sln diff显示解决方案的一个项目以及如何将分析器添加为依赖以控制构建顺序:
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RubberduckCodeAnalysis", "RubberduckCodeAnalysis\RubberduckCodeAnalysis\RubberduckCodeAnalysis.csproj", "{A2B4E037-A446-41B9-A304-F91C7C7A6972}"
+EndProject
这让我想到了AppVeyor构建错误,我被困在:
C:\ Program Files(x86)\ Microsoft Visual 工作室\ 2017年\社区\的MSBuild \ 15.0 \斌\ Microsoft.Common.CurrentVersion.targets(1603,5): 错误:项目 &#39; C:\项目\ rubberduck \ RubberduckCodeAnalysis \ RubberduckCodeAnalysis \ RubberduckCodeAnalysis.csproj&#39; 目标&netstandard1.3&#39;。 项目不能引用它 目标&#39; .NETFramework,版本= v4.5&#39; 。 [C:\项目\ rubberduck \ Rubberduck.Parsing \ Rubberduck.Parsing.csproj]
在本地调试版本中,可以手动构建分析器项目,然后可以构建其他解决方案。分析得很好,无需破解项目依赖性。
在AppVeyor CI构建服务器上,分析器项目只是一个DLL,它是解决方案的一部分,如果我们不告诉它是先构建的,那么分析器DLL就会赢得&#39找到并且解决方案不会构建。
看起来我卡住了,无论我看哪个问题。我的用户都是Win32用户,我不关心可移植性;我确实关心在Windows Vista上运行,所以我有没有办法在没有将项目重新定位到.NET Standard 1.3的情况下构建CI?
答案 0 :(得分:5)
如果查看documentation of .NET Standard,您会看到1.3版与.NET Framework 4.6兼容:
你说你需要支持Windows Vista,你很幸运,因为Windows Vista支持的最新版本的.NET(需要SP2)是.NET Framework 4.6:.NET Framework system requirements。
因此,我建议您将所有项目更新到.NET Framework 4.6,并且不应再看到兼容性问题。