Почему я могу использовать некоторые переменные окружения в некоторых элементах файла csproj, но не в других в msbuild? - PullRequest
2 голосов
/ 04 августа 2010

Какие могут быть причины для следующего странного поведения и как я могу отследить проблемы?

Мы используем комбинацию make files и msbuild.

У меня есть проект, которыйдолжен быть строго назван.Ранее я настраивал snk для использования в файле проекта следующим образом:

<AssemblyOriginatorKeyFile>$(EnvironmentVariable)TheKeyName.snk</AssemblyOriginatorKeyFile> 

, где EnvironmentVariable была определена в пакетном файле, который запустил оболочку для сборки, следующим образом:

set EnvironmentVariable='SomePath'

и это сработало нормально.Теперь мне нужно изменить ключ строкового имени, чтобы он мог различаться на компьютере разработчика и сервере сборки выпуска.Существует переменная, которая существует для хранения полного пути к файлу ключа строгого имени, называемая StrongNameKeyFile.Это определено в среде msbuild, и если я помещу некоторый текстовый вывод в файлы целей или свойств, которые включены как часть задачи msbuild, которая создает проект, то я вижу, что этот StrongNameKeyFile указывает на правильное местоположение.Таким образом, я изменил csproj, чтобы вместо этого иметь:

<AssemblyOriginatorKeyFile>$(StrongNameKeyFile)</AssemblyOriginatorKeyFile>

, но когда я пытаюсь скомпилировать, он оценивается как пустой, и во время сборки не указывается / keyfile.

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

Почему это может быть?AssemblyOriginatorKeyFile как-то специально обрабатывается?Как я могу отследить причину этого?

1 Ответ

2 голосов
/ 05 августа 2010

Нет веской причины, почему это должно происходить - как вы знаете, это обычно работает;скорее всего, что-то в цепи уронит на пол.

Одна вещь, которую нужно попробовать, это явно передать ее через / p: StrongNameKeyFile = XX - это исключит переменные окружения и их правильное распространение из ваших запросов.

Еще одна потенциальная вещь - это что-то сгуститпеременная в качестве имени используется для чего-то еще?

Запустите с / v: diag, и вы получите дампы всех входных данных и / или переменных при их изменении.

Или если включеноV4, используйте MSBuild Debugger

и купите Hashimi et al MSBuild book

...