提问人:szajch 提问时间:10/29/2023 最后编辑:marc_sszajch 更新时间:10/31/2023 访问量:60
Roslyn 编译器看不到引用
Roslyn compiler does not see references
问:
我正在尝试创建一个能够编译另一个 .NET 6.0 应用程序的 .NET 6.0 应用程序。问题是 Roslyn 似乎没有看到参考资料。
这些是我从 Roslyn 收到的一些错误:
程序集名称无效:该名称包含无效字符。
找不到类型或命名空间的名称“List<>” 找不到类型或命名空间“Task”
的名称 找不到类型或命名空间“StreamReader”的名称 名称“Environment”在当前上下文中不存在 名称“String”在当前上下文
中不存在 名称“Array”
在当前上下文
中不存在类型“MarshalByRefObject”在未引用的程序集中定义。您需要添加对“System.Runtime”程序集
的引用 类型“Uri”在未引用的程序集中定义。您需要添加对“System.Runtime”程序集的引用
这是我的编译器代码:
var syntaxTree = CSharpSyntaxTree.ParseText(source);
var references = new[]
{
MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
MetadataReference.CreateFromFile(Path.Combine(dp, "BouncyCastle.Crypto.dll"))
};
var compilation = CSharpCompilation.Create(output)
.WithOptions(new CSharpCompilationOptions(OutputKind.WindowsApplication))
.AddReferences(references)
.AddSyntaxTrees(syntaxTree);
EmitResult emitResult = compilation.Emit(output);
我已经尝试过这样的事情:
var references = new[]
{
MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
MetadataReference.CreateFromFile(typeof(HttpClient).Assembly.Location),
MetadataReference.CreateFromFile(typeof(System.Net.HttpWebRequest).Assembly.Location),
MetadataReference.CreateFromFile(typeof(System.Text.RegularExpressions.Regex).Assembly.Location),
MetadataReference.CreateFromFile(typeof(List<>).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Task).Assembly.Location),
MetadataReference.CreateFromFile(typeof(StreamReader).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Environment).Assembly.Location),
MetadataReference.CreateFromFile(typeof(string).Assembly.Location),
MetadataReference.CreateFromFile(typeof(MarshalByRefObject).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Uri).Assembly.Location),
MetadataReference.CreateFromFile(Path.Combine(dp, "BouncyCastle.Crypto.dll"))
};
但它似乎不起作用。
有什么想法吗?
答:
1赞
Youssef13
10/31/2023
#1
不应以这种方式创建元数据引用。请改用 Basic.Reference.Assemblies.Net60 NuGet 包。GitHub 存储库 README 有更多关于如何使用此包的说明,但简而言之,您需要做的就是(不要忘记)。var references = ReferenceAssemblies.Net60
using Basic.Reference.Assemblies;
评论
0赞
szajch
10/31/2023
就这样做了.但是错误是一样的,仍然缺少命名空间等。.AddReferences(Net60.References.All).AddReferences(MetadataReference.CreateFromFile(Path.Combine(dp, "BouncyCastle.Crypto.dll")
0赞
szajch
11/1/2023
Nevermid,我想通了。原因是缺少子库,例如 .using System.XXX
System.Net.Http
评论