MSBuild не может найти ссылку

В настоящее время я пытаюсь понять, почему MSBuild не может скомпилировать одну из наших unit test dll. Проблема возникает только с этой DLL, а не с другими проектами unit test.

Это результат, который я получаю от TeamCity при сбое сборки:

[10:38:55]: NAnt output:
[10:38:55]: [exec]
[10:38:55]: [exec]
[10:38:55]: [exec] "C:\Robinson\trunk\Projects\Robinson\Robinson.sln" (default target) (1) ->
[10:38:55]: [exec] "C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj" (default target) (19) ->
[10:38:55]: [exec] (CoreCompile target) ->
[10:38:55]: [exec] Modules\SecurityModuleTests.cs(10,30): error CS0234: The type or namespace name 'Modules' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] Modules\SecurityModuleTests.cs(197,39): error CS0246: The type or namespace name 'SecurityModule' could not be found (are you missing a using directive or an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] TranslateTests.cs(10,30): error CS0234: The type or namespace name 'Utils' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] IPETests.cs(8,30): error CS0234: The type or namespace name 'Ajax' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] Pages\BasePageTest.cs(6,30): error CS0234: The type or namespace name 'Utils' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] Pages\BasePageTest.cs(7,30): error CS0234: The type or namespace name 'Pages' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] ServiceAsmxTests.cs(9,30): error CS0234: The type or namespace name 'Ajax' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] ServiceAsmxTests.cs(10,30): error CS0234: The type or namespace name 'Utils' does not exist in the namespace 'TenForce.Execution.Web' (are you missing an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] Pages\BasePageTest.cs(16,17): error CS0246: The type or namespace name 'basepage' could not be found (are you missing a using directive or an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec] ServiceAsmxTests.cs(22,17): error CS0246: The type or namespace name 'Service' could not be found (are you missing a using directive or an assembly reference?) [C:\Robinson\trunk\Projects\Robinson\TenForceExecutionTests\TenForceExecutionTests.csproj]
[10:38:55]: [exec]
[10:38:55]: [exec] 2075 Warning(s)
[10:38:55]: [exec] 10 Error(s)
[10:38:55]: [exec]
[10:38:55]: [exec] Time Elapsed 00:01:40.06

Проект TenForceExecutionTests - это просто DLL, содержащая несколько UnitTests MBunit Framework. Этот проект имеет ссылку на TenForceExecution, который представляет собой проект веб-приложения и другую ссылку на TenForce.Execution.Test, которая представляет собой другую DLL, содержащую логику для обоих проектов.

Когда мы скомпилируем все на машине разработки, она работает без проблем, и компиляция встречается без ошибок. Однако в агенте сборки это кажется неудачным...

INFO

  • Целевая структура:.NET4
  • ОС: Windows XP 32bit
  • Установлен Windows 7 SDK

ИЗМЕНИТЬ

Была ли чистая проверка, и Visual Studio смогла построить все решение, msbuild, однако, не может.

РЕДАКТИРОВАТЬ 2

Проверяют зависимости:

  • Существует зависимость проекта от проектов
  • Существует решение зависимости между проектами

РЕДАКТИРОВАТЬ 3 Когда я удаляю ссылку на проект webApplication и заменяю его ссылкой на скомпилированную DLL этого проекта, ошибки исчезают, а проект компилируется в MSBuild.

РЕДАКТИРОВАТЬ 4 Я выполнил всю сборку из msbuild через LOG и посмотрел на конкретную задачу для компиляции проекта, который создает проблемы:

  Task "Csc"
    c:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\ASP.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\BUL\bin\Debug\BUL.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\BULTest\bin\Debug\BULTest.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\DAL\bin\Debug\DAL.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\Framework\bin\Debug\Framework.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\Gallio.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\Iesi.Collections.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\LanguageResource\bin\Debug\LanguageResource.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\log4net.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\MbUnit.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll" /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\NHibernate.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\PresentationBridge\bin\Debug\PresentationBridge.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\PresentationBridgeTest\bin\Debug\PresentationBridgeTest.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Configuration.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll" /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\System.Data.SQLite.DLL /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Extensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.Services.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Xml.dll" /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\TenForce.Execution.Test\bin\Debug\TenForce.Execution.Test.dll /reference:D:\Users\arne.de.herdt.TENFORCE2\Documents\RobinsonSource\Projects\Robinson\ThirdPartyComponents\WatiN.Core.dll /debug+ /debug:full /optimize- /out:obj\Debug\TenForceExecutionTests.dll /target:library Modules\SecurityModuleTests.cs TestRunSetup.cs TranslateTests.cs WebBaseTest.cs MetaTests.cs IPETests.cs Pages\BasePageTest.cs Properties\AssemblyInfo.cs ServiceAsmxTests.cs Settings.Designer.cs "D:\Users\arne.de.herdt.TENFORCE2\AppData\Local\Temp\6\.NETFramework,Version=v4.0.AssemblyAttributes.cs"
    Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
    Copyright (C) Microsoft Corporation. All rights reserved.

Из того, что я могу сказать, актуал WebApplication НЕ включен в список ссылок.

Ответ 2

Если бы та же проблема была сегодня, закончилось, что проект, на который нельзя ссылаться, имел другую платформу, указанную x86, где другие проекты, где есть любая платформа. Чтобы обойти это, мне пришлось установить параметр с помощью /p: Platform = "Mixed Platforms". Вы можете видеть, что использует VS, перейдя в Configuration Manager и глядя на платформу Active Solution, выбранную в правом верхнем углу.

Ответ 3

Я знаю, что это старый пост, но я наткнулся на него сегодня, поэтому подумал, что буду предлагать отзывы для кого-то еще.

Я столкнулся с этим несколько раз и обнаружил, что изменение целевой платформы из .NET Client 4 Client Profile только на .NET Framework 4 делает трюк.

Ответ 4

Я также обнаружил аналогичную проблему при сборке пакета appx UWP. Есть много сообщений об ошибках:

App.xaml.cs(6,15): error CS0234: The type or namespace name 'ApplicationModel' does not exist in the namespace 'Windows' (are you missing an assembly reference?)

Если открыть файл sln с помощью VS2017, он не создает проблем.

Я сделал две вещи, чтобы решить эту проблему:

  1. Я заметил, что оригинальное решение требует winSDK 10.0.18362, но на моей сборочной машине его нет. Если открыть с VS2017, он просит меня переназначить SDK на установленную старую версию. Я думаю, что msbuild может не справиться с перенастройкой, поэтому я просто скачал и установил требуемый winSDK 18362.
  2. Я добавил параметр/t: restore"в командную строку msbuild и дважды запустил msbuild:
    msbuild mySolution.sln /p:Configuration="Release" /p:Platform="x64" /t:restore
    msbuild mySolution.sln /p:Configuration="Release" /p:Platform="x64"

Для восстановления, пожалуйста, обратитесь к https://docs.microsoft.com/en-us/nuget/reference/msbuild-targets#restore-target

Ответ 5

Если вы делаете чистую проверку в новой папке на своей машине, она тоже работает там?

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

Ответ 6

У меня также возникла проблема, связанная с тем, что создание VS не всегда совпадает с простое использование msbuild. Тогда мне помогло создать журнал прогона msbuild (/fl switch) и проверить журнал и проследить шаги сборки и попытаться найти проблемную задачу.

Ответ 7

Я проверяю пропущенные свойства dll и вижу, что имя сборки имеет одно и то же имя пространства имен по умолчанию. Затем я меняю имя сборки на другое, и я решил свою проблему.

Ответ 8

Я тоже испытал ту же проблему.

Я действительно сомневаюсь, почему MSBuild бросает недостающую ссылку на сборку, когда мы запускаем файл решения через MSBuild и Jenkins, но он работает как прелесть в Visual Studio. После двухдневных боев я нашел для этого вывод.

Я написал пакет script для запуска файла решения сначала через Visual Studio, а затем запустил файл решения. Это не работает нормально.

Все, что вам нужно сделать, это вызвать пакет script, а затем запустить MSBuild/Jenkins.

Пакет script:

cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE devenv "C:\Program Files (x86)\Jenkins\workspace\TFS\Product\Soluttion.sln" /Восстановить

devenv: запуск Visual Studio в командной строке.

Примечание: вам действительно нужна Visual Studio, если вы используете MSBuild/Jenkins на сервере.

Отправьте мне письмо по любым вопросам, касающимся этого..........

Ответ 9

Я столкнулся с этим сообщением об ошибке при создании решения с MSBuild в режиме выпуска, хотя режим отладки работал нормально, и оба работали в Visual Studio. Оказалось, в настройках решения проект не был настроен на сборку "Release | Mixed Platforms" или "Release | Any CPU".

Ответ 10

Я пытался использовать AnyCPU и Prefer-32 bit, он все еще не работал. Также пробовал с AnyCPU без проверки Prefer-32 bit, но ничего не получалось. У меня была эта проблема при развертывании моего кода с помощью Bamboo. Я удостоверился, что все мои пакеты возвращены в код(так как в моем восстановлении nuget в бамбуке есть проблема) и убедился, что мои dll-ссылки в проекте ищут пакеты в их путях. Я проверил свои пакеты, удалив /packages из файла .gitignore. Кроме того, обновил мой файл packages.config в проекте, чтобы упомянуть пакет и версию для использования. Например: Кроме того, убедитесь, что агент, на котором выполняется задача "Развертывание", имеет необходимую версию .NET Framework. Со всеми вышеизложенными изменениями я мог бы решить эту проблему.