Mat*_*don 7 .net c# msbuild continuous-integration
我在GitHub上有一个OSS项目是在AppVeyor CI上用Visual Studio 2017构建的.NET 4.5(不是预览的东西,只是2017).
该解决方案构建了一个COM加载项,扩展了一个着名的可怕的传统Win32 IDE,我们已经确定我们需要运行的最早的Windows版本是Vista(所以,.net 4.5及其async/await非常棒).
到现在为止还挺好.现在构建一个COM可见的.net DLL是一回事,构建一个在进程中运行的COM加载项,托管在20年前最后一次更新的繁琐应用程序中,是另一个:我们不能依赖.net垃圾收集清理RCW是不确定的,因此很容易意外地泄漏COM对象并引入严重的运行时(实际拆除)问题,因此核心贡献者之一是将一个Roslyn分析器项目添加到解决方案中,这将有助于贡献者新旧通过防止可能引入这种泄漏的构建.
所以解决方案中的所有.csproj文件都得到了这个差异:
+ <ItemGroup>
+ <Analyzer Include="..\RubberduckCodeAnalysis\RubberduckCodeAnalysis\bin\Release\netstandard1.3\RubberduckCodeAnalysis.dll" />
+ </ItemGroup>
Run Code Online (Sandbox Code Playgroud)
因此,需要首先构建分析器项目.
有.sln diff显示新分析器项目的GUID:
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RubberduckCodeAnalysis", "RubberduckCodeAnalysis\RubberduckCodeAnalysis\RubberduckCodeAnalysis.csproj", "{A2B4E037-A446-41B9-A304-F91C7C7A6972}"
+EndProject
Run Code Online (Sandbox Code Playgroud)
然后.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
Run Code Online (Sandbox Code Playgroud)
这让我想到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,您不应再看到任何兼容性问题.