我正在尝试使用存储在我的.csproj文件中的引用来提供Roslyn。如果我有一个本地文件,这很简单,但我在添加“标准”程序集(如System等)的引用时遇到问题。我该怎么做(在Roslyn,MsBuild或其他什么)? Roslyn接受基于文件路径的引用,所以我不能只按名称添加程序集(也就是说,不先加载它)。或者我可以吗?如果没有,我如何找到项目引用中列出的程序集的路径?
我知道那里引用的程序集不一定来自GAC,这使得它更难。
答案 0 :(得分:1)
不确定Roslyn,但是通常的CSharp项目使用来自c:\ Program Files(x86)\ reference Assemblies \ Microsoft \:
的dll提供常用的CSharp编译器(CSC.exe)
我建议你试试这些参考组件(当你安装VS时,它们会为此专门复制到你的PC上)
答案 1 :(得分:0)
[Test]
public void MsBuildPropertyContainsRefeerenceAssemblyFolder() {
var project = new Project(@"D:\\Projects\\Chpokk\\src\\Chpokk.Tests\\Chpokk.Tests.csproj");
var property = project.AllEvaluatedProperties.First(projectProperty => projectProperty.Name == "FrameworkPathOverride");
Console.WriteLine(property.EvaluatedValue);
}
(你必须在顶部添加using Microsoft.Build.Evaluation;
)
实际上这只是要看的人文件夹之一,但最明显的一个。完整列表可以通过AssemblySearchPaths
属性获取,并包含在Registry中找到的文件夹。