使用以下项目创建解决方案。
一个.NetStandard2.0项目,命名为“1”
一个.NetStandard2.0项目,命名为“2”
在2中添加项目1的引用
.Net4.6.1 控制台项目将其命名为“3”并添加 nuget Microsoft.CodeAnalysis.CSharp.Workspaces v2.7.0
将以下代码粘贴到项目3中
static void Main(string[] args)
{
string dir = Path.Combine(Environment.CurrentDirectory, "..\\..\\..\\");
string solutionPath = Directory.GetFiles(dir, "*.sln").First();
var msWorkspace = MSBuildWorkspace.Create();
Solution solution = msWorkspace.OpenSolutionAsync(solutionPath).Result;
DateTime date = DateTime.UtcNow;
foreach (var project in solution.Projects.Take(2))
{
Compilation compilation = project.GetCompilationAsync().Result;
using (var dllStream = new MemoryStream())
{
var emitResult = compilation.Emit(dllStream);
if (emitResult.Success)
{
Console.WriteLine("Success");
}
else
{
foreach (var err in emitResult.Diagnostics)
{
Console.WriteLine($"{err.ToString()}");
}
}
}
}
Console.Read();
}
执行项目 3 会引发项目 2 的以下错误,但不会引发项目 1 的错误。
警告 CS8021:未找到 RuntimeMetadataVersion 值。找不到包含 System.Object 的程序集,也没有通过选项指定 RuntimeMetadataVersion 的值。
d:\test\roslyntest\2\Class1.cs(1,7): 错误 CS0246: 找不到类型或命名空间名称“System”(您是否缺少 using 指令或程序集引用?)
d:\test\roslyntest\2\Class1.cs(5,18):错误CS0518:未定义或导入预定义类型“System.Object”
d:\test\roslyntest\2\Class1.cs(5,18):错误CS1729:“对象”不包含采用0个参数的构造函数
我的问题。
为什么在项目 2 中找不到基础类,而在项目 1 中却找不到?
唯一的区别是项目 2 引用了另一个项目。
我错过了什么/做错了什么?