【问题标题】:CodeDomProvider.CompileAssemblyFromSource - Can't Find Roslyn (csc.exe)CodeDomProvider.CompileAssemblyFromSource - 找不到 Roslyn (csc.exe)
【发布时间】:2017-02-16 17:52:38
【问题描述】:

我们最近从旧的 CodeDomProvider 升级到了名为 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 的新 Roslyn CodeDomProvider。它工作正常,但它在错误的位置查找 csc.exe。 NuGet包将exe放在路径中:

[应用路径]\bin\Debug\roslyn

但是,当我们编译时,我们得到这个错误: 找不到路径“[App Path]\bin\Debug\bin\roslyn\csc.exe”的一部分。

请注意,它正在错误的位置寻找 exe。它正在 bin\Debug 文件夹中的“bin”文件夹中寻找它。因此,为了使我们的代码能够编译,我们需要将 Roslyn 编译器移至: [应用路径]\bin\Debug\bin\roslyn\csc.exe

有没有办法告诉 CodeDomProvider Roslyn 编译器的位置?这不只是 Roslyn 编译器代码中的一个错误吗?

【问题讨论】:

    标签: c# .net compilation roslyn codedom


    【解决方案1】:

    我会看一下 NuGet 包 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix。我没有使用它,但它有 10K 的下载量,因为我认为这是很多人遇到的问题。我遇到了这个问题,我记得使用反射来解决它,这是我写的 sn-p 参考了我所基于的 Stack Overflow 答案,其中 _compiler 是我的 CSharpCodeProvider:

    // Little hack here, see http://stackoverflow.com/a/40311406/1676558.
    object compilerSettings = typeof(CSharpCodeProvider)
        .GetField("_compilerSettings", BindingFlags.Instance | BindingFlags.NonPublic)
        .GetValue(_compiler);
    FieldInfo compilerSettingsFullPathField = compilerSettings
        .GetType()
        .GetField("_compilerFullPath", BindingFlags.Instance | BindingFlags.NonPublic);
    string desiredCompilerSettingsFullPath = ((string)compilerSettingsFullPathField
        .GetValue(compilerSettings))
        .Replace(@"bin\roslyn\", @"roslyn\");
    compilerSettingsFullPathField.SetValue(compilerSettings, desiredCompilerSettingsFullPath);
    

    【讨论】:

    • 啊,是的。这很hacky,但看起来它可以解决问题。
    【解决方案2】:

    将项目设置的“构建事件”选项卡中的“构建后事件命令行”更改为:

    IF EXIST $(TargetDir)roslyn\csc.exe (MKDIR $(TargetDir)bin & MOVE /Y $(TargetDir)roslyn $(TargetDir)bin\roslyn)
    

    【讨论】:

    • 我意识到我可以做到这一点,但这不是重点。我想将所有二进制文件保存在一个文件夹中。为什么 Roslyn 被硬编码为只有在一个位置才有效?
    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2018-01-12
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多