Visual Studio: имя сборки и пространство имен по умолчанию из имени проекта - PullRequest
0 голосов
/ 27 сентября 2019

Контекст: настройка имени сборки / пространства имен по умолчанию в Свойствах проекта (щелкните правой кнопкой мыши проект, Свойства, вкладку Приложения или измените .csproj).

Я хотел бы добавить параметр вявно указывайте их после имени проекта, а также некоторые пользовательские суффиксы.Поэтому, если я переименую свой проект, имя / пространство имен сборки будет следовать за этим переименованием.

Пример: проект с именем foofoo_suffix.dll .Если я переименую проект в foo1foo1_suffix.dll .То же поведение для пространства имен.

Чтение Общие макросы для команд и свойств MSBuild , я попытался ввести $(ProjectName) как в VS, так и в файле .csproj, но я получаю DLL-файл с именем.именно так.

Как мне это сделать?

1 Ответ

0 голосов
/ 30 сентября 2019

Как мне это сделать?

1 .Попробуйте использовать $(MSBuildProjectName) свойство из этого документа .

Вы разрабатываете C# project(csproj), в то время как ваш документ выше о macros in C++ projects(vcxproj).Поэтому я думаю, что свойство $(MSBuildProjectName) может быть более подходящим для вас после нескольких тестов.

( Я пробовал $(ProjectName), но оно работало только тогда, когда я устанавливал что-то вроде <AssemblyName>$(ProjectName)</AssemblyName>, если ядобавить суффикс, например $(ProjectName)_suffix, иногда выводим _suffix.dll. Но он всегда работает хорошо, если я использую $(MSBuildProjectName)!)

Я получаю желаемое поведение, но это противоречивос тем, что я вижу в проекте, Свойства, вкладка Приложения.

2 .Попробуйте перезагрузить файл проекта (Right-click project, unload.., reload...) для обновления пользовательского интерфейса.

Из вашего комментария кажется, что $(ProjectName)_suffix хорошо работает на вашем компьютере?Если это так, вы все равно можете использовать $(ProjectName) свойство.

То, что вы испытали, - это ожидаемое поведение для Msbuild и VS.VS будет считывать значение с csproj в течение project loading process.Затем он отображает соответствующее значение с помощью пользовательского интерфейса.

Таким образом, после того, как мы переименуем имя проекта и затем построим проект, мы можем получить ProjectName_suffix.dll в выходной папке.Но пользовательский интерфейс все еще не изменен (несовместим), потому что теперь нам нужно обновить пользовательский интерфейс .

Вы можете right-click project node, unload the project=>reload the project обновить интерфейс.И теперь вывод xx.dll может соответствовать тому, что вы видите в project, Properties, Application tab.Нам необходимо перезагрузить проект каждый раз после того, как вы переименуете проект, тогда пользовательский интерфейс будет соответствовать вашему xx.dll.И на самом деле это не повлияет на вашу сборку, хотя пользовательский интерфейс не обновляется, вывод может соответствовать вашему желаемому поведению.

3 .Все вышеизложенное больше относится к отношениям между Assembly Name and Project Name.Вам следует знать, что msbuild (csproj) не будет изменять исходные файлы (xx.cs) после создания проекта.

Предположим, у вас есть файл Class1.cs с пространством имен Library.Если вы переименуете проект в NewLibrary, перезагрузите проект, и вы увидите, что пространство имен теперь NewLibrary в project, Properties, Application tab.Но пространство имен для файла Class1.cs все еще старое Library.Это ожидаемое поведение в VS, и новое NameSpace NewLibrary будет работать, если вы создадите новый файл xx.cs .

Надеюсь, все вышеперечисленное поможет:)

...