我正在try 创建一个.NET 6.0应用程序,它将能够编译另一个.NET 6.0应用程序.问题是,罗斯林似乎没有看到参考文献.

以下是我从罗斯林那里收到的一些错误:

Invalid assembly name: The name contains invalid characters.
Cannot find the name of the type or namespace 'List<>'
Cannot find the name of the type or namespace 'Task'
Cannot find the name of the type or namespace 'StreamReader'
Name 'Environment' does not exist in the current context
Name 'String' does not exist in the current context
Name 'Array' does not exist in the current context
Type 'MarshalByRefObject' is defined in an unreferenced assembly. You need to add a reference to the 'System.Runtime' assembly
Type 'Uri' is defined in an unreferenced assembly. You need to add a reference to the 'System.Runtime' assembly

这是我的编译器代码:

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);

我已经try 过这样的东西:

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"))
};

但它似乎并没有奏效.

有什么主意吗?

推荐答案

您应该以这种方式创建元数据引用.取而代之的是使用Basic.Reference.Assemblies.Net60NuGet套餐.GitHub repo README有更多关于如何使用这个包的说明,但简而言之,您所需要做的就是var references = ReferenceAssemblies.Net60(不要忘记using Basic.Reference.Assemblies;).

Csharp相关问答推荐

如果没有中间变量,可空引用类型将无法工作

Blazor:用参数创建根路径

当打印一行x个项目时,如何打印最后一行项目?

在命令行中使用时安装,但在单击时不会安装

LINQ无法翻译SQLFunctions方法

Blazor WebApp:原始异常:AADSTS700025:客户端是公共的,因此既不应显示客户端,也不应显示客户端

使用HttpResponseMessage中的嵌套列表初始化JSON

当用户右键单击文本框并单击粘贴时触发什么事件?

为具有实体框架后端的Reaction项目 Select 正确的Visual Studio模板

当前代码Cosmos DB 3.37.1:PartitionKey key key mismatch exception

VS 2022 for ASP.NET Core中缺少自定义项模板

Selify只更改第一个下拉菜单,然后忽略REST-C#

使用System.Text.Json进行序列化时发生StackOverflow异常

我可以查看我们向应用程序洞察发送了多少数据吗?

为什么Azure函数(独立工作进程)索引失败?使用Azure App配置的CosmosDbTrigger绑定失败,未解析为值

System.NotSupportdException:流不支持读取

在同一个捕获中可以有多种类型的异常吗?

C#如何获取字符串中引号之间的文本?

避免在特定区域中设置Visual Studio代码的自动格式

将两个JSON文件与覆盖值的主文件合并