gpt4 book ai didi

c# - CodeDomProvider.CompileAssemblyFromSource - 找不到 Roslyn (csc.exe)

转载 作者:行者123 更新时间:2023-11-30 17:34:35 32 4
gpt4 key购买 nike

我们最近从旧的 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 编译器代码中的一个直接错误吗?

最佳答案

我会看一下 NuGet 包 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix。我没有使用过它,但它有 10K 的下载量,因为我认为这是很多人都遇到过的问题。我遇到了这个问题,我记得使用反射来解决它,这是我写的代码片段,引用了我基于它的 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);

关于c# - CodeDomProvider.CompileAssemblyFromSource - 找不到 Roslyn (csc.exe),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42260915/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com