命名空间'Mono'中不存在类型或命名空间名称'Cecil'

时间:2013-07-22 16:03:51

标签: c# linux mono mono.cecil

我是C#编程的新手。 我正在尝试编译一个需要单片cecil的C#程序

这是我想编译的代码 我不知道如何添加参考...有人可以帮我解决这个问题吗?

using System;
using Mono.Cecil;
using Mono;

public class Program {
  public static void Main() {
    string infile = "in.exe";
    string outfile = "out.exe";
    Guid guid = Guid.Parse("12345678-1234-1234-1234-1234567890ab");
    AssemblyDefinition asm = AssemblyDefinition.ReadAssembly(infile);
    ModuleDefinition mod = asm.MainModule;
    mod.Mvid = guid;
    asm.Write(outfile);
  }
}

使用mcs编译程序时出现以下错误

error CS0234: The type or namespace name 'Cecil' does not exist in the namespace 'Mono'.Are you missing an assembly reference?

我无法在/usr/lib/mono/4.0&找到Mono.Cecil.dll。 /usr/lib/mono/2.0。 Mono.Cecil.dll仅出现在/ usr / lib / monodevelop / bin /

如果我遗失了什么,请告诉我?以及如何摆脱这个错误???

此致

Puliyan

1 个答案:

答案 0 :(得分:3)

您需要告诉编译器-r-pkg-lib选项,找到Mono.Cecil.dll的位置。

始终有效的解决方案是从源代码构建.dll

git clone https://github.com/mono/cecil.git
cd cecil
xbuild /property:Configuration=net_4_0_Release

您还可以使用其他配置(例如net_4_0_Debug)。检查.sln.csproj文件中的值。您会在Mono.Cecil.dll子目录中找到obj。然后,您可以将该库复制到您想要的任何位置,并使用-r:/path/to/Mono.Cecil.dll-lib:/path/to/libdirectory -r:Mono.Cecil.dll进行编译,或者如果您使用的是MonoDevelop,请添加对库的引用(在MonoDevelop中,您还应该能够直接引用该项目。)

Cecil通常也应该通过pkg-config机制提供;但是,cecil.pc文件似乎配置错​​误。通常情况下,只使用-pkg:cecil就足够了,但这似乎已被打破,而你必须使用类似的东西:

dmcs -r:`pkg-config --variable=Libraries`

以获取GAC中Mono.Cecil.dll的完整路径。

另外,因为mono在Debian下的许多软件包中被拆分,如果上面的代码不起作用,你可能需要安装额外的库(我现在不知道Cecil是否是核心软件包的一部分或不是)。