gpt4 book ai didi

当类继承 Dictionary 时,C# RoslynCompiler 失败

转载 作者:行者123 更新时间:2023-12-02 03:34:02 25 4
gpt4 key购买 nike

由于某种原因,.NET Core 上的 Roslyn 在访问继承自 Dictionary 的类时似乎会引发错误。

CS0012: The type 'Dictionary<,>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Collections, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

我的语法树如下所示:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using JQL.Core;

namespace RoslynCompileSample
{
public class Writer
{
public object LinqIt(string outKey, Dictionary<string

IEnumerable<TestClass>> db)
{
return db[outKey] = ({$linq
});
}
}
}

还有我的引用资料:

MetadataReference[] references = new MetadataReference[]
{
MetadataReference.CreateFromFile(typeof(JQLQuery).Assembly.Location),
MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location),
MetadataReference.CreateFromFile(typeof(System.Runtime.AssemblyTargetedPatchBandAttribute).Assembly.Location),
MetadataReference.CreateFromFile(typeof(DynamicAttribute).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo).Assembly.Location),
MetadataReference.CreateFromFile(typeof(System.Collections.Generic.Dictionary<,>).Assembly.Location),
MetadataReference.CreateFromFile(typeof(System.Collections.Generic.Dictionary<string,object>).Assembly.Location)
};

我的类(class)

    public class TestClass : Dictionary<string, object>
{
public int age { get; set; }

public TestClass()
{
this.age = 10;
}
}

如果对象是在 Roslyn SyntaxTree 中定义的,则字典可以工作。如果传入任何字典或继承的对象,我会收到错误。

知道是什么原因造成的吗?我的收藏版本实际上是 4.3.0,所以不确定为什么它甚至要求更低的版本。

最佳答案

动态编译程序集(.Net Core 3.1)也有同样的问题。

在下面的代码中:

public IEnumerable<object> GetMetadata()
{
return _objects.Select(GetMetadata).ToList();
}

需要引用 System.Collections。

The type 'List<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Collections, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

但是引用这样的东西

typeof(System.Collections.IList).Assembly

已返回 System.Private.CoreLib.dll 的位置。

所以

const string longName = "System.Collections, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";

var systemCollectionsAssembly = Assembly.Load(longName);

提供引用。

关于当类继承 Dictionary<T1, T2> 时,C# RoslynCompiler 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891472/

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