對於.NET解決方案,是否有辦法在解決方案中獲取每個項目的所有.dll文件?例如,如果我製作一個空白的.NET解決方案(這是Visual Studio 2010 btw),並添加3個名爲「a」,「b」和「c」的項目並構建每個項目,爲我提供dll的a.dll,b .dll和c.dll,C#或Powershell中是否有任何代碼示例可以爲我提供這些.dll的集合(但不包括使用第三方庫的任何其他.dll)?如何在我的.NET解決方案中獲得程序集的集合?
感謝
對於.NET解決方案,是否有辦法在解決方案中獲取每個項目的所有.dll文件?例如,如果我製作一個空白的.NET解決方案(這是Visual Studio 2010 btw),並添加3個名爲「a」,「b」和「c」的項目並構建每個項目,爲我提供dll的a.dll,b .dll和c.dll,C#或Powershell中是否有任何代碼示例可以爲我提供這些.dll的集合(但不包括使用第三方庫的任何其他.dll)?如何在我的.NET解決方案中獲得程序集的集合?
感謝
一個簡單的方法(無需編寫VS插件)將被解析項目文件。該項目文件(這是XML格式)有一個名爲ProjectReference元素(經常引用的另一種元素,稱爲Reference
):
<Project ...>
<ItemGroup>
<ProjectReference Include="..\path\YourProject.csproj">
...
</ProjectReference>
</ItemGroup>
</Project>
你可以簡單地分析這一點,就在你的工具集有任何XML API並通過使用項目的名稱(Include
屬性)獲取dll的名稱。當然,這隻適用於你的項目和dll具有相同名稱的情況。如果沒有,則可以打開csproj
文件並找到元素<AssemblyName>
對於這種情況很難實現100%穩健的解決方案。項目文件雖然通常很簡單,但隨着人們利用MSBuild的靈活性,可能變得非常複雜。例如,對於同一個項目,可以使用特定的構建設置來構建具有非常不同名稱的程序集。這使得在不理解整體構建上下文的情況下挑選程序集名稱非常困難。
然而,對於最直接的情況下,下面的PowerShell腳本將做的伎倆。確保它在指定的解決方案文件所在的目錄中運行。
gc SomeProject.sln |
? { $_ -match "^Project" } |
% { ($_.Split(","))[1].Trim().Trim('"') } |
? { $_ -match ".*proj" } |
% { $x = [xml](gc $_); $x.Project.PropertyGroup[0].AssemblyName } |
% { $_ + ".dll" }
是的,你需要的兩件事是每個項目的'OutputPath'和'AssemblyName'。但即使在最簡單的情況下,輸出路徑也會根據所選的Configuration和Platform進行更改(例如:Debug vs Release)。 – Jaykul 2010-10-25 13:55:09
這是什麼意思?使用Fuslogvw.exe。 – 2010-10-23 23:48:41
你可以通過執行構建和解析輸出來獲取它們嗎?這將縮小到特定的配置/平臺,您可以輕鬆地解析構建輸出的日誌輸出,而不是解析項目文件的條件。 – Jaykul 2010-10-25 13:58:03