2010-10-23 46 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

相關問題