Какие причины могут быть для следующего странного поведения и как я могу отследить проблемы?
Мы используем комбинацию файлов make и msbuild.
У меня есть проект, который должен быть строго назван. Ранее я устанавливал snk для использования в файле проекта следующим образом:
<AssemblyOriginatorKeyFile>$(EnvironmentVariable)TheKeyName.snk</AssemblyOriginatorKeyFile>
где EnvironmentVariable была определена в пакетном файле, который запускал оболочку для сборки следующим образом:
set EnvironmentVariable='SomePath'
и это сработало нормально. Теперь мне нужно, чтобы ключ имени строки можно было изменить, чтобы он мог отличаться на машине разработчика и на сервере сборки выпуска. Существует переменная, которая содержит полный путь к файлу ключа строгого имени, который называется StrongNameKeyFile. Это определено в среде msbuild, и если я помещу некоторый текстовый вывод в файлы целей или свойств, которые включены как часть задачи msbuild, которая создает проект, я увижу, что этот StrongNameKeyFile указывает на правильное местоположение. Поэтому я изменил csproj, чтобы вместо этого было это:
<AssemblyOriginatorKeyFile>$(StrongNameKeyFile)</AssemblyOriginatorKeyFile>
но когда я пытаюсь скомпилировать, это оценивается как пустое, и во время сборки не указывается ключевой файл.
У нас также есть переменные, определенные в файлах make, и к ним также можно получить доступ в csproj. Они используются для указания местоположений ссылочных dll, поэтому они могут отличаться на машинах разработки и сборки. Я знаю, что они установлены, так как ссылки выводятся правильно, и все компилируется, но если я попытаюсь использовать одну из этих переменных в элементе AssemblyOriginatorKeyFile, тогда она оценивается как пустая в этом элементе, но работает в элементе ссылки.
Почему это может быть? Является ли AssemblyOriginatorKeyFile каким-то особым образом обработанным? Как я могу отследить причину этого?