TFS2010构建自动化无法在网络共享上找到参考



我有一个位于网络共享上的项目中的文件引用。在所有开发机器上都可以正常构建。

当我尝试执行自动构建时,构建失败引用错误CS0246:类型或命名空间名称"Assembly"无法找到…

服务器可以发现引用(serverReferencesSharedRelease assembly .dll),并且构建服务帐户具有对文件夹(和程序集)的修改权限。

项目定义包含一个有效的提示路径标签到serverReferencesSharedRelease,我已经添加了/p:ReferencePath="serverReferencesSharedRelease"到MSBuild Arguments属性(尽管我不认为这些设置应该是必要的)。

还有人有其他的建议吗?

这是失败构建的日志片段:

ResolveAssemblyReferences:
  Primary reference "DataLayer".
C:WindowsMicrosoft.NETFrameworkv4.0.30319Microsoft.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:Builds1APPNAMEAPPNAME6SourcesAPPNAME.LoggerAPPNAME.Logger.csproj]
          For SearchPath "\SERVERNAMEReferencesShared 2.0Release".
          Considered "\SERVERNAMEReferencesShared 2.0ReleaseDataLayer.dll", but it didn't exist.
          Considered "\SERVERNAMEReferencesShared 2.0ReleaseDataLayer.exe", but it didn't exist.
          For SearchPath "{HintPathFromItem}".
          Considered "\SERVERNAMEc$ReferencesShared 2.5ReleaseDataLayer.dll", but it didn't exist.
          For SearchPath "{TargetFrameworkDirectory}".
          Considered "C:Program FilesReference AssembliesMicrosoftFrameworkv3.5DataLayer.dll", but it didn't exist.
          Considered "C:Program FilesReference AssembliesMicrosoftFrameworkv3.5DataLayer.exe", but it didn't exist.
          Considered "C:WindowsMicrosoft.NETFrameworkv3.5DataLayer.dll", but it didn't exist.
          Considered "C:WindowsMicrosoft.NETFrameworkv3.5DataLayer.exe", but it didn't exist.
          Considered "C:Program FilesReference AssembliesMicrosoftFrameworkv3.0DataLayer.dll", but it didn't exist.
          Considered "C:Program FilesReference AssembliesMicrosoftFrameworkv3.0DataLayer.exe", but it didn't exist.
          Considered "C:WindowsMicrosoft.NETFrameworkv3.0DataLayer.dll", but it didn't exist.
          Considered "C:WindowsMicrosoft.NETFrameworkv3.0DataLayer.exe", but it didn't exist.
          Considered "C:WindowsMicrosoft.NETFrameworkv2.0.50727DataLayer.dll", but it didn't exist.
          Considered "C:WindowsMicrosoft.NETFrameworkv2.0.50727DataLayer.exe", but it didn't exist.
          For SearchPath "{Registry:SoftwareMicrosoft.NETFramework,v3.5,AssemblyFoldersEx}".
          Considered "C:Program FilesReference AssembliesMicrosoftVSTAv9.0DataLayer.dll", but it didn't exist.
          Considered "C:Program FilesReference AssembliesMicrosoftVSTAv9.0DataLayer.exe", but it didn't exist.
          Considered "C:Program FilesMicrosoft Visual Studio 9.0Common7IDEPublicAssembliesDataLayer.dll", but it didn't exist.
          Considered "C:Program FilesMicrosoft Visual Studio 9.0Common7IDEPublicAssembliesDataLayer.exe", but it didn't exist.
          Considered "C:Program FilesCommon FilesMicrosoft SharedMSEnvPublicAssembliesDataLayer.dll", but it didn't exist.
          Considered "C:Program FilesCommon FilesMicrosoft SharedMSEnvPublicAssembliesDataLayer.exe", but it didn't exist.
          Considered "C:Program FilesMicrosoft Chart ControlsAssembliesDataLayer.dll", but it didn't exist.
          Considered "C:Program FilesMicrosoft Chart ControlsAssembliesDataLayer.exe", but it didn't exist.
          For SearchPath "{AssemblyFolders}".
          Considered "C:Program FilesMicrosoft SQL Server100SDKAssembliesDataLayer.dll", but it didn't exist.
          Considered "C:Program FilesMicrosoft SQL Server100SDKAssembliesDataLayer.exe", but it didn't exist.
          Considered "C:Program FilesMicrosoft.NETADOMD.NET100DataLayer.dll", but it didn't exist.
          Considered "C:Program FilesMicrosoft.NETADOMD.NET100DataLayer.exe", but it didn't exist.
          Considered "C:Program FilesMicrosoft SQL Server100SDKAssembliesDataLayer.dll", but it didn't exist.
          Considered "C:Program FilesMicrosoft SQL Server100SDKAssembliesDataLayer.exe", but it didn't exist.
          Considered "C:Program FilesMicrosoft SQL Server100DTSTasksDataLayer.dll", but it didn't exist.
          Considered "C:Program FilesMicrosoft SQL Server100DTSTasksDataLayer.exe", but it didn't exist.
          Considered "C:Program FilesMicrosoft SQL Server100DTSPipelineComponentsDataLayer.dll", but it didn't exist.
          Considered "C:Program FilesMicrosoft SQL Server100DTSPipelineComponentsDataLayer.exe", but it didn't exist.
          Considered "C:Program FilesReference AssembliesMicrosoftFrameworkv3.5DataLayer.dll", but it didn't exist.
          Considered "C:Program FilesReference AssembliesMicrosoftFrameworkv3.5DataLayer.exe", but it didn't exist.
          Considered "C:Program FilesReference AssembliesMicrosoftFrameworkv3.0DataLayer.dll", but it didn't exist.
          Considered "C:Program FilesReference AssembliesMicrosoftFrameworkv3.0DataLayer.exe", but it didn't exist.
          Considered "C:Program FilesMicrosoft SQL Server100DTSForEachEnumeratorsDataLayer.dll", but it didn't exist.
          Considered "C:Program FilesMicrosoft SQL Server100DTSForEachEnumeratorsDataLayer.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:Builds1APPNAMEAPPNAME6Binaries".
          Considered "C:Builds1APPNAMEAPPNAME6BinariesDataLayer.dll", but it didn't exist.
          Considered "C:Builds1APPNAMEAPPNAME6BinariesDataLayer.exe", but it didn't exist.

DataLoyer.dll明确存在于SERVERNAMEReferencesShared 2.0Release.

我有一个类似的问题,用Visual Studio和MSBuild在命令行上构建会成功,但从Jenkins内部用相同的MSBuild调用构建会失败。构建失败是因为MSBuild无法解析安装在C:Program Files(而不是GAC)中的一些第三方dll(特别是Telerik控件)。

当MSBuild工作时,我提高了它的冗长程度,并注意到它在分辨率步骤下搜索正确的路径作为第一个条目:

For SearchPath "{Registry:SoftwareMicrosoft.NETFramework,v4.0,AssemblyFoldersEx}"

我在HKEY_CURRENT_USERSoftwareMicrosoft.NETFrameworkv4.0.30319AssemblyFoldersEx的注册表中进行了挖掘,并在那里找到了Telerik binaries文件夹的单个条目。由于Jenkins在SYSTEM用户下作为服务运行,我认为它没有击中这个注册表位置,所以我将条目复制到HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkv4.0.30319AssemblyFoldersEx

那起作用了。不知道这是好还是坏,或者是否有其他解决方法,但它对我来说很有效。

我建议将dll签入版本控制,这样它就可以与源代码一起进行版本控制,并且程序集将在您的工作区中,这样您就不会有网络安全问题。

最新更新