我们有一个网站项目,其中安装了以下nuget软件包
Microsoft.CodeDom.Providers.DotNetCompilerPlatform - 1.0.8
Microsoft.Net.Compilers - 2.4.0
web.config
具有以下内容
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
在本地可以正常工作。安装DotNetCompilerPlatform
后, install.ps1 脚本将在垃圾箱中创建Roslyn文件夹,并将csc.exe等复制到该文件夹。
该代码由第三方编写,并提交给我们的VSTS存储库。我想使用VSTS通过我们的测试/阶段和产品环境来构建和部署网站。
VSTS构建管道获取源代码,然后还原软件包并在解决方案上运行Visual Studio Build任务。这是一个网站项目,因此该网站没有项目。构建失败,并出现以下错误
ASPNETCOMPILER(0,0):错误ASPRUNTIME:找不到以下内容: 路径'xxxxxxxxxx \ bin \ roslyn \ csc.exe'。
由于构建只是在还原软件包,因此R oslyn二进制文件不会复制到bin 。
我还尝试从项目中删除软件包,并从web.config
中删除编译器,但是会出现错误。
错误CS1056:意外字符'$'
我正在使用一些较新的语言功能。
我真的想自动化PreCompile和Publish,因为目前有太多手动步骤,容易出错或滥用。
我曾经想过要在软件包还原后在构建管道中添加一个步骤,以运行DotNetCompilerPlatform
软件包文件夹中的 install.ps1 ,这有望将编译器工具复制到垃圾箱。即模仿安装软件包时的操作。但是在走这条路之前,我想看看是否有更好的解决方案。
答案 0 :(得分:0)
一项建议是更新您的'。csproj',以将您的内部版本定义(在代码本身中的 中)更改如下,将copy the roslyn
直接更改为{{1 }}文件夹而不是bin
。
default output directory
这样,您就无法更改VSTS构建定义