Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Mono编译时如何引用Microsoft.Boogie?_C#_Mono - Fatal编程技术网

C# 使用Mono编译时如何引用Microsoft.Boogie?

C# 使用Mono编译时如何引用Microsoft.Boogie?,c#,mono,C#,Mono,这会产生以下错误: 程序集/home/boogie/Binaries/Core.dll中缺少方法.ctor,类型为System.Diagnostics.Contracts.ContractClassAttribute 找不到自定义attr构造函数映像:/home/boogie/Binaries/Core.dll mtoken:0x0a000463 Trace.cs(19,52):错误CS0584:内部编译器错误:无法从程序集核心加载类型System.Diagnostics.Contracts.

这会产生以下错误:

程序集/home/boogie/Binaries/Core.dll中缺少方法.ctor,类型为System.Diagnostics.Contracts.ContractClassAttribute

找不到自定义attr构造函数映像:/home/boogie/Binaries/Core.dll mtoken:0x0a000463

  • Trace.cs(19,52):错误CS0584:内部编译器错误:无法从程序集
    核心
    加载类型
    System.Diagnostics.Contracts.ContractClassAttribute

  • Trace.cs(19,36):错误CS0266:无法将类型
    对象
    隐式转换为
    System.Collections.Generic.List
    。存在显式转换(是否缺少强制转换?)

  • Trace.cs(22,30):错误CS0584:内部编译器错误:无法从
    Core导入类型
    Microsoft.Boogie.Implementation
    ,版本=2.2.30705.1126,区域性=中性,PublicKeyToken=736440c9b414ea16

  • Trace.cs(22,30):错误CS0266:无法将类型
    对象
    隐式转换为
    bool
    。存在显式转换(是否缺少强制转换?)

  • Trace.cs(23,55):错误CS0584:内部编译器错误:无法从
    Core导入类型
    Microsoft.Boogie.Implementation
    ,版本=2.2.30705.1126,区域性=中性,PublicKeyToken=736440c9b414ea16

  • Trace.cs(23,33):错误CS1579:foreach语句无法对
    对象类型的变量进行操作,因为它不包含
    GetEnumerator的定义,或者不可访问

编译失败:6个错误,0个警告


有人知道如何解决这个问题吗?我是否错误地包含了库?

我似乎找不到
Microsoft.Boogie.Declaration
的源代码,但给出了错误消息,它有一个
[ContractClass]
属性,编译器找不到:

Trace.cs(19,52):错误CS0584:内部编译器错误:无法从程序集“Core”加载类型“System.Diagnostics.Contracts.ContractClassAttribute”

因此,无法加载类型
Microsoft.Boogie.Declaration
,导致
program.TopLevelDeclarations
列表
,显然是作为
对象的某种“存根”。这反过来会导致代码失败,因为您无法在对象上迭代

已将添加到.NET 4中的
mscorlib
。您使用的是
gmcs
,根据.NET2.0编译而成


我认为您最好使用mcs编译,这是推荐的。

您的机器上有库吗?您使用的是Mono框架吗?另外,如果你在Ubuntu上,你可以使用而不是手工编译,这将为你解决大部分问题
using System;
using System.Collections.Generic;
using Microsoft.Boogie;

public class Trace
{
    public static void Main(string[] args)
{
    if (args.Length != 2){
        return;
    }
    Program program = new Program();
    List<string> defines = new List<string>();
    Parser.Parse(args[0], defines, out program);
    
    string[] lines = System.IO.File.ReadAllLines(args[1]);
    Dictionary< Block, List<Block> > adj = new Dictionary< Block, List<Block> >();
    
    foreach (Declaration D in program.TopLevelDeclarations){
        Implementation I = D as Implementation;
        if(I != null){
            foreach (Block B in I.Blocks){
                object cmd = B.TransferCmd;
                if(cmd is GotoCmd){
                    List<Block> target = cmd.labelTargets;
                    adj.insert(B, target);
                }
                else if(cmd is ReturnCmd){
                    adj.insert(B, null);
                }
            }
        }
    }
}
}
gmcs -r:../../boogie/Binaries/Boogie.exe -r:../../boogie/Binaries/Core.dll Trace.cs