Как я могу получить коллекцию сборок в моем решении .NET? - PullRequest
1 голос
/ 24 октября 2010

Для решения .NET, есть ли способ получить все файлы .dll для каждого проекта в решении?Например, если я создаю пустое решение .NET (это Visual Studio 2010 btw), добавляю 3 проекта с именами «a», «b» и «c» и собираю каждый из них, предоставляя мне dll's a.dll, b.dll и c.dll, есть ли какой-либо пример кода в C # или Powershell, который может дать мне коллекцию этих .dll (но не любые другие .dll, такие как используемые сторонние библиотеки)?

Спасибо

Ответы [ 3 ]

2 голосов
/ 24 октября 2010

Трудно реализовать 100% надежное решение для этого сценария.Файлы проекта, хотя обычно и простые, могут стать очень сложными, поскольку люди пользуются гибкостью MSBuild.Например, один и тот же проект может создавать сборки с очень разными именами при определенных настройках сборки.Это очень затрудняет выбор имени сборки без понимания общего контекста сборки.

Однако для наиболее простых случаев следующий скрипт powershell подойдет.Убедитесь, что он работает в том же каталоге, что и указанный файл решения.

gc SomeProject.sln |
    ? { $_ -match "^Project" } |
    % { ($_.Split(","))[1].Trim().Trim('"') } |
    ? { $_ -match ".*proj" } |
    % { $x = [xml](gc $_); $x.Project.PropertyGroup[0].AssemblyName } |
    % { $_ + ".dll" }
0 голосов
/ 24 октября 2010

как насчет использования пространства имен EnvDTE ? Соответствующий пример показан здесь .

0 голосов
/ 24 октября 2010

Одним простым способом (без написания надстройки VS) будет анализ файла проекта.Файл проекта (в формате XML) будет иметь элемент с именем ProjectReference (обычные ссылки находятся в другом элементе, называемом Reference):

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

Вы можете просто проанализировать это с любым XML API, который выиметь в своем наборе инструментов и получить имя библиотеки DLL, используя имя проекта (атрибут Include).Это работает, конечно, только если ваш проект имеет то же имя, что и DLL.Если это не так, вы можете открыть файл csproj и найти элемент <AssemblyName>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...