Автоматизация сборки TFS2010 не может найти ссылку на сетевой ресурс - PullRequest
1 голос
/ 21 апреля 2011

У меня есть ссылка на файл в проекте, расположенном в сетевой папке. Это без проблем собирается на всех машинах разработчика.

Когда я пытаюсь выполнить автоматическую сборку, сборка завершается с ошибкой со ссылкой ошибка CS0246: не удалось найти тип или имя пространства имен 'Assembly' ...

Ссылка (\ server \ References \ Shared \ Release \ Assembly.dll) может быть обнаружена сервером, и у учетной записи службы сборки есть разрешения на изменение папки (и сборки).

Определение проекта содержит допустимый тег hintpath для \ server \ References \ Shared \ Release \, и я добавил / p: ReferencePath = "\ server \ References \ Shared \ Release" в свойство аргументов MSBuild (хотя я не не думаю, что эти настройки должны быть необходимы).

У кого-нибудь есть еще предложения?

Это фрагмент журнала неудачной сборки:

ResolveAssemblyReferences:
  Primary reference "DataLayer".
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): warning MSB3245: Could not resolve this reference. Could not locate the assembly "DataLayer". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. [C:\Builds\1\APPNAME\APPNAME\6\Sources\APPNAME.Logger\APPNAME.Logger.csproj]
          For SearchPath "\\SERVERNAME\References\Shared 2.0\Release".
          Considered "\\SERVERNAME\References\Shared 2.0\Release\DataLayer.dll", but it didn't exist.
          Considered "\\SERVERNAME\References\Shared 2.0\Release\DataLayer.exe", but it didn't exist.
          For SearchPath "{HintPathFromItem}".
          Considered "\\SERVERNAME\c$\References\Shared 2.5\Release\DataLayer.dll", but it didn't exist.
          For SearchPath "{TargetFrameworkDirectory}".
          Considered "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\DataLayer.exe", but it didn't exist.
          Considered "C:\Windows\Microsoft.NET\Framework\v3.5\DataLayer.dll", but it didn't exist.
          Considered "C:\Windows\Microsoft.NET\Framework\v3.5\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\DataLayer.exe", but it didn't exist.
          Considered "C:\Windows\Microsoft.NET\Framework\v3.0\DataLayer.dll", but it didn't exist.
          Considered "C:\Windows\Microsoft.NET\Framework\v3.0\DataLayer.exe", but it didn't exist.
          Considered "C:\Windows\Microsoft.NET\Framework\v2.0.50727\DataLayer.dll", but it didn't exist.
          Considered "C:\Windows\Microsoft.NET\Framework\v2.0.50727\DataLayer.exe", but it didn't exist.
          For SearchPath "{Registry:Software\Microsoft\.NETFramework,v3.5,AssemblyFoldersEx}".
          Considered "C:\Program Files\Reference Assemblies\Microsoft\VSTA\v9.0\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Reference Assemblies\Microsoft\VSTA\v9.0\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Microsoft Chart Controls\Assemblies\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Microsoft Chart Controls\Assemblies\DataLayer.exe", but it didn't exist.
          For SearchPath "{AssemblyFolders}".
          Considered "C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Microsoft.NET\ADOMD.NET\100\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Microsoft.NET\ADOMD.NET\100\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Microsoft SQL Server\100\DTS\Tasks\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Microsoft SQL Server\100\DTS\Tasks\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Microsoft SQL Server\100\DTS\PipelineComponents\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Microsoft SQL Server\100\DTS\PipelineComponents\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\DataLayer.exe", but it didn't exist.
          Considered "C:\Program Files\Microsoft SQL Server\100\DTS\ForEachEnumerators\DataLayer.dll", but it didn't exist.
          Considered "C:\Program Files\Microsoft SQL Server\100\DTS\ForEachEnumerators\DataLayer.exe", but it didn't exist.
          For SearchPath "{GAC}".
          Considered "DataLayer", which was not found in the GAC.
          For SearchPath "{RawFileName}".
          Considered treating "DataLayer, Version=2.5.0.0, Culture=neutral, PublicKeyToken=22db5dc9ded3fd82, processorArchitecture=MSIL" as a file name, but it didn't exist.
          For SearchPath "C:\Builds\1\APPNAME\APPNAME\6\Binaries\".
          Considered "C:\Builds\1\APPNAME\APPNAME\6\Binaries\DataLayer.dll", but it didn't exist.
          Considered "C:\Builds\1\APPNAME\APPNAME\6\Binaries\DataLayer.exe", but it didn't exist.

DataLoyer.dll определенно существует в \ SERVERNAME \ References \ Shared 2.0 \ Release.

Ответы [ 2 ]

2 голосов
/ 05 января 2013

У меня была похожая проблема, когда сборка с использованием Visual Studio, а также MSBuild в командной строке была бы успешной, но сборка с тем же вызовом MSBuild из Jenkins не удалась.Сборка не удалась, потому что MSBuild не мог разрешить некоторые сторонние библиотеки DLL (в частности, они были Telerik ), установленные в C:\Program Files (а не в GAC).

Я развернул многословиеMSBuild, когда он работал и заметил, что он искал правильный путь, поскольку первая запись в шаге разрешения, озаглавленная:

For SearchPath "{Registry:Software\Microsoft\.NETFramework,v4.0,AssemblyFoldersEx}"

Я начал копаться в реестре на HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx и нашел единственную запись для Telerik.Папка binaries там.Поскольку Jenkins запускается как служба под пользователем SYSTEM, я решил, что это не касается этого места в реестре, и поэтому я скопировал запись в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx.

.Не уверен, насколько это хорошо / плохо или есть другой способ решить эту проблему, но у меня это сработало.

0 голосов
/ 22 апреля 2011

Я бы посоветовал проверить dll в управлении версиями, чтобы он мог быть версионирован вместе с вашим исходным кодом, и сборка будет в вашем рабочем пространстве, чтобы у вас не было проблем с безопасностью сети.

...