有没有没有nuget包的Microsoft.CodeDom.Providers.DotNetCompilerPlatform方法?

问题描述

我已经编写了一个Asp.Net Webforms应用程序(aspx)。 该应用程序以DotNet 4.72为目标。 在该应用程序中,我使用的是Tuples,因此为了使语法正常工作,我安装了块包Microsoft.CodeDom.Providers.DotNetCompilerPlatform版本2.0.0

无效的代码如下:

public (Person,string,Int) Foo() 
   {
      return (new Person(),"Hello",42);
   }

有人告诉我要用程序集引用替换nugget程序包,但我找不到使它工作的方法。 我所做的步骤是:

  1. 保存文件
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll.refresh
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform.xml

将软件包的内容保存到项目中的文件夹中。

  1. 使用NuGet包管理器删除了金块包。

结果:我在语法上出现构建错误

error CS1031: Type expected
error CS1519: Invalid token '(' in class,struct,or interface member declaration
error CS1519: Invalid token ',' in class,or interface member declaration
error CS1519: Invalid token ')' in class,or interface member declaration
error CS1520: Method must have a return type
  1. 将以下全部内容添加到web.config文件中:
<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,Microsoft.CodeDom.Providers.DotNetCompilerPlatform,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" warningLevel="4"
      compilerOptions="/langversion:default /Nowarn:1659;1699;1701" />
    <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider,PublicKeyToken=31bf3856ad364e35"
      warningLevel="4" compilerOptions="/langversion:default /Nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
  </compilers>
</system.codedom>

然后我得到一个编译错误

Could not find a part of the path 'C:\Users\myUserName\source\repos\WebSite1\WebSite1\bin\roslyn\csc.exe'.              

我可以在不使用NuGet软件包的情况下使用此软件包吗? 如果是这样,我该怎么办?

谢谢。

解决方法

尝试将dll文件复制到bin目录或在项目中创建一个lib文件夹,然后从那里引用它。还要确保右键单击dll文件->“属性->复制到输出目录->始终复制”