2010-10-23 86 views
1

对于.NET解决方案,是否有办法在解决方案中获取每个项目的所有.dll文件?例如,如果我制作一个空白的.NET解决方案(这是Visual Studio 2010 btw),并添加3个名为“a”,“b”和“c”的项目并构建每个项目,为我提供dll的a.dll,b .dll和c.dll,C#或Powershell中是否有任何代码示例可以为我提供这些.dll的集合(但不包括使用第三方库的任何其他.dll)?如何在我的.NET解决方案中获得程序集的集合?

感谢

+1

这是什么意思?使用Fuslogvw.exe。 – 2010-10-23 23:48:41

+0

你可以通过执行构建和解析输出来获取它们吗?这将缩小到特定的配置/平台,您可以轻松地解析构建输出的日志输出,而不是解析项目文件的条件。 – Jaykul 2010-10-25 13:58:03

回答

0

一个简单的方法(无需编写VS插件)将被解析项目文件。该项目文件(这是XML格式)有一个名为ProjectReference元素(经常引用的另一种元素,称为Reference):

<Project ...> 
    <ItemGroup> 
    <ProjectReference Include="..\path\YourProject.csproj"> 
     ... 
    </ProjectReference> 
    </ItemGroup> 
</Project> 

你可以简单地分析这一点,就在你的工具集有任何XML API并通过使用项目的名称(Include属性)获取dll的名称。当然,这只适用于你的项目和dll具有相同名称的情况。如果没有,则可以打开csproj文件并找到元素<AssemblyName>

2

对于这种情况很难实现100%稳健的解决方案。项目文件虽然通常很简单,但随着人们利用MSBuild的灵活性,可能变得非常复杂。例如,对于同一个项目,可以使用特定的构建设置来构建具有非常不同名称的程序集。这使得在不理解整体构建上下文的情况下挑选程序集名称非常困难。

然而,对于最直接的情况下,下面的PowerShell脚本将做的伎俩。确保它在指定的解决方案文件所在的目录中运行。

gc SomeProject.sln | 
    ? { $_ -match "^Project" } | 
    % { ($_.Split(","))[1].Trim().Trim('"') } | 
    ? { $_ -match ".*proj" } | 
    % { $x = [xml](gc $_); $x.Project.PropertyGroup[0].AssemblyName } | 
    % { $_ + ".dll" } 
+0

是的,你需要的两件事是每个项目的'OutputPath'和'AssemblyName'。但即使在最简单的情况下,输出路径也会根据所选的Configuration和Platform进行更改(例如:Debug vs Release)。 – Jaykul 2010-10-25 13:55:09

相关问题