Mono 单链接器链接Hello World中的框架程序集时出错

Mono 单链接器链接Hello World中的框架程序集时出错,mono,mono.cecil,Mono,Mono.cecil,我的问题与中描述的相同 C:\monotest>type test.cs 公开课考试 { 公共静态void Main(){ 系统控制台写入线(“BOO”); } } C:\monotest>“C:\ProgramFiles(x86)\Mono-2.10.9\bin\monolinker.bat”-一个“test.exe”-C链接 Mono CIL链接器中存在致命错误 System.ArgumentException:成员“System.Security.AccessControl.AccessR

我的问题与中描述的相同

C:\monotest>type test.cs
公开课考试
{
公共静态void Main(){
系统控制台写入线(“BOO”);
}
}
C:\monotest>“C:\ProgramFiles(x86)\Mono-2.10.9\bin\monolinker.bat”-一个“test.exe”-C链接
Mono CIL链接器中存在致命错误
System.ArgumentException:成员“System.Security.AccessControl.AccessRule”在另一个模块中声明,需要导入
位于:0中的Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider提供程序)[0x00000]
在Mono.Cecil.SignatureWriter.maketypedeforrefcoderid(Mono.Cecil.TypeReference类型)[0x00000]中:0
0中的Mono.Cecil.SignatureWriter.WriteTypeSignature(Mono.Cecil.TypeReference类型)[0x00000]处
位于:0中的Mono.Cecil.SignatureWriter.WriteGenericInstanceSignature(IGenericInstance实例)[0x00000]
0中的Mono.Cecil.SignatureWriter.WriteTypeSignature(Mono.Cecil.TypeReference类型)[0x00000]处
位于Mono.Cecil.MetadataBuilder.GetFieldSignature(Mono.Cecil.FieldReference字段)[0x00000]中:0
位于:0中的Mono.Cecil.MetadataBuilder.AddField(Mono.Cecil.FieldDefinition字段)[0x00000]
位于:0中的Mono.Cecil.MetadataBuilder.AddFields(Mono.Cecil.TypeDefinition类型)[0x00000]
在:0中的Mono.Cecil.MetadataBuilder.AddType(Mono.Cecil.TypeDefinition类型)[0x00000]处
在:0中的Mono.Cecil.MetadataBuilder.AddTypeDefs()[0x00000]处
位于:0中的Mono.Cecil.MetadataBuilder.BuildTypes()[0x00000]
位于:0中的Mono.Cecil.MetadataBuilder.BuildModule()[0x00000]
位于:0中的Mono.Cecil.MetadataBuilder.BuildMetadata()[0x00000]
位于Mono.Cecil.ModuleWriter.m_u18(Mono.Cecil.MetadataBuilder builder,Mono.Cecil.MetadataReader_u)[0x00000]in:0
在Mono.Cecil.ModuleDefinition.Read[MetadataBuilder,MetadataBuilder](Mono.Cecil.MetadataBuilder项,System.Func`3 Read)[0x00000]中:0
位于:0中的Mono.Cecil.ModuleWriter.BuildMetadata(Mono.Cecil.ModuleDefinition module,Mono.Cecil.MetadataBuilder元数据)[0x00000]
在Mono.Cecil.ModuleWriter.WriteModuleTo(Mono.Cecil.moduledefinitionmodule,System.IO.Stream,Mono.Cecil.WriterParameters参数)[0x00000]中:0
在Mono.Cecil.ModuleDefinition.Write处(System.IO.Stream,Mono.Cecil.WriterParameters参数)[0x00000]输入:0
在:0中的Mono.Cecil.ModuleDefinition.Write(System.String文件名,Mono.Cecil.WriterParameters参数)[0x00000]处
在:0中的Mono.Cecil.AssemblyDefinition.Write(System.String文件名,Mono.Cecil.WriterParameters参数)[0x00000]处
位于:0中的Mono.Linker.Steps.OutputStep.OutputAssembly(Mono.Cecil.AssemblyDefinition assembly)[0x00000]处
在:0中的Mono.Linker.Steps.OutputStep.ProcessAssembly(Mono.Cecil.AssemblyDefinition程序集)[0x00000]处
在0中的Mono.Linker.Steps.BaseStep.Process(Mono.Linker.LinkContext上下文)[0x00000]处
在0中的Mono.Linker.Pipeline.Process(Mono.Linker.LinkContext上下文)[0x00000]处
在0中的Mono.Linker.Driver.Run()[0x00000]处
在:0中的Mono.Linker.Driver.Main(System.String[]args)[0x00000]处
我还没有在Linux下进行测试,但引用的示例进行了测试。第2.10.8节和第2.10.9节中的情况也是如此

我在Cecil中发现了一个开源项目,该项目注释掉了对“throw CreateForeignMemberException(member);”的调用,这就是导致以下情况的原因:

Cecil on的主干上仍有该代码处于活动状态。我厌倦了取消一张我一开始不明白的支票

在堆栈溢出问题中,Mono linker的作者建议自己编译它:

请注意,Mono的所有发布版本都附带链接器的编译版本,但我建议您自己编译


为什么我需要自己编译呢?我该怎么做才能让它工作?现在我只是在探索它的用途,但它似乎很有希望。

我在linux上使用mono 2.11.4、monolinker 0.2.0.0和gmcs(.net 2.0)成功地链接了它。对于.net 4.0 dmcs,它失败了,错误
无法解析并发。ConcurrentQueue`1/c_uuIteratorb
对于我来说,它也在2.11.4下工作。这些都是相同的并排安装,所以一定有东西被修复了。不幸的是,2.11.4为我破坏了许多其他不相关的东西。
C:\monotest>type test.cs
public class Test
{
    public static void Main() {
        System.Console.WriteLine("BOO");
    }
}

C:\monotest>"C:\Program Files (x86)\Mono-2.10.9\bin\monolinker.bat" -a "test.exe" -c link
Fatal error in Mono CIL Linker
System.ArgumentException: Member 'System.Security.AccessControl.AccessRule' is declared in another module and needs to be imported
at Mono.Cecil.MetadataBuilder.LookupToken (IMetadataTokenProvider provider) [0x00000] in <filename unknown>:0
at Mono.Cecil.SignatureWriter.MakeTypeDefOrRefCodedRID (Mono.Cecil.TypeReference type) [0x00000] in <filename unknown>:0
at Mono.Cecil.SignatureWriter.WriteTypeSignature (Mono.Cecil.TypeReference type) [0x00000] in <filename unknown>:0
at Mono.Cecil.SignatureWriter.WriteGenericInstanceSignature (IGenericInstance instance) [0x00000] in <filename unknown>:0
at Mono.Cecil.SignatureWriter.WriteTypeSignature (Mono.Cecil.TypeReference type) [0x00000] in <filename unknown>:0
at Mono.Cecil.MetadataBuilder.GetFieldSignature (Mono.Cecil.FieldReference field) [0x00000] in <filename unknown>:0
at Mono.Cecil.MetadataBuilder.AddField (Mono.Cecil.FieldDefinition field) [0x00000] in <filename unknown>:0
at Mono.Cecil.MetadataBuilder.AddFields (Mono.Cecil.TypeDefinition type) [0x00000] in <filename unknown>:0
at Mono.Cecil.MetadataBuilder.AddType (Mono.Cecil.TypeDefinition type) [0x00000] in <filename unknown>:0
at Mono.Cecil.MetadataBuilder.AddTypeDefs () [0x00000] in <filename unknown>:0
at Mono.Cecil.MetadataBuilder.BuildTypes () [0x00000] in <filename unknown>:0
at Mono.Cecil.MetadataBuilder.BuildModule () [0x00000] in <filename unknown>:0
at Mono.Cecil.MetadataBuilder.BuildMetadata () [0x00000] in <filename unknown>:0
at Mono.Cecil.ModuleWriter.<BuildMetadata>m__18 (Mono.Cecil.MetadataBuilder builder, Mono.Cecil.MetadataReader _) [0x00000] in <filename unknown>:0
at Mono.Cecil.ModuleDefinition.Read[MetadataBuilder,MetadataBuilder] (Mono.Cecil.MetadataBuilder item, System.Func`3 read) [0x00000] in <filename unknown>:0
at Mono.Cecil.ModuleWriter.BuildMetadata (Mono.Cecil.ModuleDefinition module, Mono.Cecil.MetadataBuilder metadata) [0x00000] in <filename unknown>:0
at Mono.Cecil.ModuleWriter.WriteModuleTo (Mono.Cecil.ModuleDefinition module, System.IO.Stream stream, Mono.Cecil.WriterParameters parameters) [0x00000] in <filename unknown>:0
at Mono.Cecil.ModuleDefinition.Write (System.IO.Stream stream, Mono.Cecil.WriterParameters parameters) [0x00000] in <filename unknown>:0
at Mono.Cecil.ModuleDefinition.Write (System.String fileName, Mono.Cecil.WriterParameters parameters) [0x00000] in <filename unknown>:0
at Mono.Cecil.AssemblyDefinition.Write (System.String fileName, Mono.Cecil.WriterParameters parameters) [0x00000] in <filename unknown>:0
at Mono.Linker.Steps.OutputStep.OutputAssembly (Mono.Cecil.AssemblyDefinition assembly) [0x00000] in <filename unknown>:0
at Mono.Linker.Steps.OutputStep.ProcessAssembly (Mono.Cecil.AssemblyDefinition assembly) [0x00000] in <filename unknown>:0
at Mono.Linker.Steps.BaseStep.Process (Mono.Linker.LinkContext context) [0x00000] in <filename unknown>:0
at Mono.Linker.Pipeline.Process (Mono.Linker.LinkContext context) [0x00000] in <filename unknown>:0
at Mono.Linker.Driver.Run () [0x00000] in <filename unknown>:0
at Mono.Linker.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0