Получить имя сборки во время компиляции в Visual Studio - PullRequest
2 голосов
/ 25 августа 2009

Есть ли способ узнать имя сборки во время разработки (т. Е. Не использовать API-интерфейсы отражения или среды выполнения, такие как System.Reflection.Assembly.GetEntryAssembly) из Visual Studio?

В сценарии необходим инструмент для получения имени сборки, в которое в конечном итоге будет компилирован проект Visual Studio.

Это похоже на синтаксический анализ свойства AssemblyName .csproj - мне интересно, есть ли какие-либо API, которые могут надежно предоставлять эту информацию.

Пожалуйста, не отвечайте в ответ на API-интерфейсы среды выполнения, которые используют отражение - в то время, когда мне нужно имя сборки, нет файла сборки - только метаданные сборки в файле csproj.

Ответы [ 5 ]

3 голосов
/ 25 августа 2009

если вы вызываете инструмент через событие post / pre-build, к этим данным очень легко получить доступ.

Просто перейдите на вкладку «Свойства проекта-> События сборки», затем выберите «Редактировать до сборки» или «Редактировать после сборки», в зависимости от того, когда вы хотите запустить инструмент. Это должно вызвать окно редактирования с очень полезной кнопкой «Макросы >>». Нажмите на это, и вы получите кучу макросов для использования, и вам должно быть достаточно всего, что вам нужно.

2 голосов
/ 25 августа 2009

«API», который вы можете использовать, это LINQ to XML, после того как весь файл .csproj - это просто xml. (и вы можете получить местоположение файла .csproj, если вам нужно, из файла решения, который по какой-то причине не является XML, но может быть легко проанализирован)

1 голос
/ 05 мая 2011

Вы можете использовать «TargetName», доступное в макросах, для событий после сборки.Это даст вам имя сборки для вашего проекта.

0 голосов
/ 25 августа 2009

После быстрого пробежки по MSDN я нашел эту статью, которая может стать хорошим началом для дальнейших исследований:

Доступ к конкретному типу проекта, элементу проекта и свойствам конфигурации

0 голосов
/ 25 августа 2009

Я думаю, вам нужно написать некоторое регулярное выражение , которое даст вам значение атрибута "AssemblyTitle" в файле AssemblyInfo.cs.

Примерно так:

public class Assembly
{
    public static string GetTitle (string fileFullName) {
        var contents = File.ReadAllText (fileFullName); //may raise exception if file doesn't exist

        //regex string is: AssemblyTitle\x20*\(\x20*"(?<Title>.*)"\x20*\)
        //loading from settings because it is annoying to type it in editor
        var reg = new Regex (Settings.Default.Expression);
        var match = reg.Match (contents);
        var titleGroup = match.Groups["Title"];
        return (match.Success && titleGroup.Success) ? titleGroup.Value : String.Empty;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...