我正在尝试对Roslyn进行一些更改,但不幸的是,当我运行VisualStudioSetup.Next
时,即使未经修改的解决方案也会崩溃,但尝试加载MS程序集时出错。所以我做了一些简单的更改,用新版本替换了我的机器现有的二进制文件和配置文件。在C:/Program Files (x86)/MSBuild/bin and Windows/Microsoft.NET/Framework64
中进行了更改。
替换CSC,VBCSCompiler,DLL和配置文件会导致csc.exe
在任何构建上引发错误。它抱怨清单指定了CodeAnalysis.CSharp
DLL的不同版本。它没有为文件甚至名称提供路径。我用新版本替换了上述文件夹中的配置和DLL。我需要实际替换哪些文件才能正常工作?
我搜索了所有CSC实例的整个驱动器,并确保所有配置都指定了DLL的新版本,因此我不确定现在在哪里查看。
我知道可以将参数传递给MSBuild或者在csproj文件中添加一个部分来指定编译器二进制文件的目录,但是我想要胜过这个东西。
编辑:所以我决定只更改构建版本号。通过VS中的程序集属性执行此操作会导致构建失败。我尝试使用MSBuild,但是在每个项目中都出现此错误:
"F:\Git\Repos\roslyn\src\Compilers\CSharp\csc\csc.csproj" (default target) (1) ->
F:\Git\Repos\roslyn\build\Targets\Versions.props(42,5):
error MSB4184: The expression ""1".Substring(3)" cannot be evaluated.
startIndex cannot be larger than length of string.
Parameter name: startIndex F:\Git\Repos\roslyn\src\Compilers\CSharp\csc\csc.csproj]
虽然从VS建立起来很好。
MSBuild参数:/p:OfficialBuild=true /p:BuildNumber=1.3.1.60616 /p:Configuration=Release
答案 0 :(得分:1)
在Visual Studio 2017的实验实例中替换编译器当前min。所需版本为v15.3或更高版本。并且必须安装Roslyn.Compilers.Extension.vsix
而不是VisualStudioSetup.Next
。
DotNet Roslyn github repo文档中的确切信息如下:
CompilerExtension :可以在解决方案资源管理器的Compilers文件夹中找到此项目,并构建
Roslyn.Compilers.Extension.vsix
。这将部署用于在IDE中进行实际构建的命令行编译器的副本。它只影响从其安装的Visual Studio实验实例触发的构建,因此它不会影响您的常规构建。请注意,如果您只安装此文件,IDE将无法了解您的构建中包含的任何语言功能。如果您经常处理新的语言功能,您可能希望考虑构建CompilerExtension和VisualStudioSetup项目,以确保实际构建和实时分析同步。
VisualStudioSetup.Next
的说明清楚地说明了它的限制和预期用法,这正在修复IDE错误:
VisualStudioSetup.Next :此项目可在Solution Explorer的VisualStudio文件夹中找到,并构建Roslyn.VisualStudio.Setup.vsix。理论上,它包含用于为下一版本的VS(Dev16)点亮功能的代码,但是自Dev15 / VS2017发布以来,目前尚未对其进行更新。如果您正在修复IDE错误,那么这就是您要使用的项目。
如果计划是在Visual Studio 2017的默认实例中替换Roslyn编译器,则执行以下操作:
Roslyn.Compilers.Extension.vsix
包,然后提升安装扩展名。这次它应该在默认情况下可用。上述步骤也可以应用于Visual Studio构建工具。
注意 - 如果您构建并使用未发布的代码,即使在安装步骤中也会出现错误。