2010-08-04 1 views
2

Какие причины могут возникнуть для следующего странного поведения и как я могу отслеживать проблемы?Почему я могу использовать некоторые переменные среды в некоторых элементах в файле csproj, но не в других в msbuild?

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

У меня есть проект, который должен быть сильно назван. Я был предварительно установив SNK для использования в файле проекта, как это:

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

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

set EnvironmentVariable='SomePath' 

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

<AssemblyOriginatorKeyFile>$(StrongNameKeyFile)</AssemblyOriginatorKeyFile> 

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

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

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

+0

Is $ (StrongNameKeyFile) относительный путь к директории проекта? –

+0

Нет, $ (StrongNameKeyFile) - это абсолютный путь к ключевому файлу –

+0

Я думаю, AssemblyOriginatorKeyFile должен быть дорогой относительно файла проекта. –

ответ

2

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

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

Другая потенциальная вещь заключается в том, что что-то сбивает переменную, поскольку имя используется vy что-то еще?

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

Или, если на V4, используйте MSBuild Debugger

И купить Hashimi et al MSBuild book

+0

спасибо,/v: diag может быть именно то, что я ищу. Я попробую это как можно скорее. –