Как использовать другое имя сборки для разных конфигураций? - PullRequest
11 голосов
/ 16 октября 2008

В Visual Studio 2008 (и других) при создании приложения .NET или silverlight, если вы посмотрите на свойства своего проекта, кажется, что у вас может быть только одно имя сборки - во всех конфигурациях. Я хотел бы скомпилировать свою заявку как:

MyAppDebug - в режиме отладки и просто MyApp - в режиме релиза

Кто-нибудь знает, возможно ли это?

Edit:

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

Я работаю над приложением Silverlight, которое автоматически загружается на наш тестовый сайт, когда я нахожусь в «решении для сборки». Проблема в том, что команда тестирования сейчас тестирует онлайн-версию, а я работаю над новой. Итак, я хочу иметь URL-адрес типа. \ MyApp.html для обычной версии, которую будет тестировать команда QA, а затем. \ MyApp.html? Version = отладка для текущей версии, над которой я работаю.

Ответы [ 4 ]

13 голосов
/ 05 апреля 2010

Я сделал это, связавшись с файлом .csproj: либо переместите атрибут в группы свойств, зависящие от конфигурации, либо просто используйте Condition. Пример:

<AssemblyName>MyApp</AssemblyName>
<AssemblyName Condition=" '$(Configuration)' == 'Debug' ">MyAppDebug</AssemblyName>

Visual Studio становится несколько поврежденным, когда вы начинаете возиться с .csproj следующим образом - например, я больше не могу F5 / F10 запускать проект в режиме отладки; он говорит мне, что «MyApp.exe» не был найден (то есть отладчик пытается запустить сборку с неверным AssemblyName).

3 голосов
/ 16 октября 2008

Конечно, вы можете добавить событие после сборки, чтобы переименовать сборку. Это будет работать, если ваше решение имеет только одну сборку.

Но если ваше решение состоит из нескольких проектов, у вас обычно есть один проект, ссылающийся на сборку, созданную другой проблемой. Представьте, что у вашего решения есть два проекта: первый создает исполняемый файл Windows Forms (MyApp.EXE), который ссылается на сборку, созданную вторым проектом (MyData.DLL).

В этом примере отладочный EXE-файл будет называться MyAppDebug.EXE, и он должен ссылаться на MyDataDebug.EXE. И это не будет работать с переименованием в событии после сборки.

Поэтому я настоятельно рекомендую не делать никаких переименований.

2 голосов
/ 16 октября 2008

Если вы абсолютно уверены в этом, то вы можете сделать что-то подобное в вашем файле AssemblyInfo.cs:

#if DEBUG
[assembly: AssemblyTitle("MyAssemblyDebug")]
#else
[assembly: AssemblyTitle("MyAssembly")]
#endif

Тем не менее, это в значительной степени взломать. Кроме того, в документации MSDN совершенно ясно, что имя файла даже не учитывается при загрузке сборки, поэтому простое переименование не изменит общей идентичности вашей сборки.

Как упомянуто выше, это, как правило, будет плохой идеей, поскольку это только приведет к путанице и проблемам с обслуживанием. Если все, что вы делаете, это переименовываете файлы, выполняя операцию посткомпиляции:

переименование "$ (ProjectDir) Bin \ Debug \ SomeAssembly.dll" SomeAssemblyDebug.dll

Тогда вы на самом деле не изменили личность вашей сборки, а только имя файла. Вы можете назвать его Bob.dll, и он по-прежнему будет иметь ту же идентичность, что и CLR. Единственный раз, когда это имеет значение, это когда вы используете сборку со строгим именем, которая будет развернута в GAC. В этом случае вы не можете иметь имя файла, отличное от имени сборки.

Если вы действительно пытаетесь переименовать имя сборки, а не просто имя файла, у вас есть еще одна проблема, потому что теперь она полностью отличается от CLR.

Я думаю, вам лучше жить с уже действующими стандартами. Если вам нужно сделать что-то действительно странное, возможно, вам следует спросить себя, почему вы пытаетесь это сделать. Там может быть лучшее решение.

1 голос
/ 16 октября 2008

Мне удалось достичь того, чего я достиг, с помощью сценария после сборки:

if "$(ConfigurationName)"=="Debug" goto debug
"$(SolutionDir)ftp.bat" "$(TargetDir)$(TargetName).xap"
:debug
"$(SolutionDir)ftp.bat" "$(TargetDir)$(TargetName).xap" "$(TargetDir)$(TargetName)Debug.xap"

Мой ftp-скрипт в основном принимает необязательный параметр в конце для загрузки файла. Так что на моем локальном компьютере имена файлов всегда одинаковы, но в режиме отладки мы загружаем их с помощью «Debug» в конце имени файла. Теперь я могу выбрать на своей веб-странице, какую версию показывать.

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