如何获得标准装配的位置?

时间:2013-10-25 09:45:52

标签: c# .net msbuild .net-assembly roslyn

我正在尝试使用存储在我的.csproj文件中的引用来提供Roslyn。如果我有一个本地文件,这很简单,但我在添加“标准”程序集(如System等)的引用时遇到问题。我该怎么做(在Roslyn,MsBuild或其他什么)? Roslyn接受基于文件路径的引用,所以我不能只按名称添加程序集(也就是说,不先加载它)。或者我可以吗?如果没有,我如何找到项目引用中列出的程序集的路径?

我知道那里引用的程序集不一定来自GAC,这使得它更难。

2 个答案:

答案 0 :(得分:1)

不确定Roslyn,但是通常的CSharp项目使用来自c:\ Program Files(x86)\ reference Assemblies \ Microsoft \:

的dll提供常用的CSharp编译器(CSC.exe)

building a sample solution

我建议你试试这些参考组件(当你安装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中找到的文件夹。