首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeDomProvider.CompileAssemblyFromSource -找不到罗斯林(csc.exe)

CodeDomProvider.CompileAssemblyFromSource -找不到罗斯林(csc.exe)
EN

Stack Overflow用户
提问于 2017-02-15 22:02:18
回答 2查看 1K关注 0票数 4

最近,我们从一个旧的CodeDomProvider升级到了新的罗斯林CodeDomProvider,叫做CodeDomProvider。它工作得很好,但是它在错误的地方寻找csc.exe。NuGet包将exe放置在路径中:

App路径\bin\Debug\roslyn

但是,当我们编译时,我们会得到这个错误:无法找到路径'App \bin\Debug\bin\roslyn\csc.exe‘的一部分。

注意,它在错误的位置寻找exe。它正在"bin“文件夹中寻找它,该文件夹已经在bin\Debug文件夹中。因此,为了使代码编译,我们需要将Roslyn编译器移动到: App Path\bin\Debug\bin\roslyn\csc.exe。

有没有办法告诉CodeDomProvider编译器位于哪里?这难道不是罗斯林编译器代码中的一个直接错误吗?

EN

回答 2

Stack Overflow用户

发布于 2017-02-16 01:54:21

我想看看Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix.的NuGet包我没有使用它,但它有10K下载,因为这是一个问题,很多人都遇到了,我认为。我遇到了这个问题,我记得我使用反射来解决这个问题,下面是我编写的代码片段,其中引用了我所基于的堆栈溢出答案,其中_compiler是我的CSharpCodeProvider:

代码语言:javascript
复制
// 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);
票数 1
EN

Stack Overflow用户

发布于 2017-02-16 09:52:38

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

代码语言:javascript
复制
IF EXIST $(TargetDir)roslyn\csc.exe (MKDIR $(TargetDir)bin & MOVE /Y $(TargetDir)roslyn $(TargetDir)bin\roslyn)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42260915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档