我有一个关于GitHub的开放源码软件项目是在VisualStudio2017与.NET 4.5构建在AppVeyor CI上(不是预览内容,仅是2017年)。
该解决方案构建了一个COM外接程序,它扩展了著名的传统Win32 IDE,并且我们已经确定,我们需要运行的最早版本是.net (所以,.net 4.5和它的async/await awesomeness)。
到现在为止还好。现在,构建COM可见的.net DLL是一回事,构建运行在进程中的COM外接程序是另一回事,该应用程序是在20年前更新的,这是另一回事:我们不能依赖.net垃圾收集来清理RCW的非确定性,因此很容易意外泄漏COM对象并引入严重的运行时(实际上是删除)问题,因此将Roslyn分析器项目添加到解决方案中的核心贡献者之一是将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差异显示了解决方案的一个项目,以及分析器是如何作为依赖项添加的,以便控制构建顺序
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:\程序文件(x86)\Microsoft Visual 'C:\projects\rubberduck\RubberduckCodeAnalysis\RubberduckCodeAnalysis\RubberduckCodeAnalysis.csproj‘错误:项目’C:\projects\rubberduck\RubberduckCodeAnalysis\RubberduckCodeAnalysis\RubberduckCodeAnalysis.csproj‘目标'netstandard1.3’。它不能被目标为'.NETFramework,Version=v4.5'的项目引用。C:\projects\rubberduck\Rubberduck.Parsing\Rubberduck.Parsing.csproj
在本地调试构建中,可以手动构建分析器项目,然后可以构建解决方案的其余部分&对其进行良好的分析,而不需要破解项目依赖关系。
但是,在AppVeyor CI构建服务器上,分析器项目只是解决方案的一部分,如果我们不让它先构建,那么分析器DLL就找不到,解决方案也不会构建。
看来我被卡住了,不管我从哪一边看问题。我的用户都是Win32用户,我不关心可移植性;不过,我确实很愿意在Windows上运行,那么有什么方法可以在CI上构建这个系统而不将项目重定向到.NET标准1.3呢?
发布于 2018-05-01 18:32:52
如果您查看.NET标准的文档化,您将看到版本1.3与.NET Framework4.6兼容:

你说你需要支持Windows,你很幸运,因为Windows中支持的最后一个版本的.NET (SP2必需的)是.NET框架4.6:.NET框架系统需求。
因此,我建议您将所有项目更新到.NET Framework4.6,并且您不应该看到任何更多的兼容性问题。
https://stackoverflow.com/questions/50119795
复制相似问题