MSBuild не может найти ссылку - PullRequest
14 голосов
/ 22 июня 2011

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

Это вывод, который я получаю от 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, которая содержит несколько юнит-тестов MBunit Framework.Этот проект имеет ссылку на TenForceExecution , которая является проектом веб-приложения, и другую ссылку на TenForce.Execution.Test , которая является еще однимDLL, содержащая логику для обоих проектов.

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

INFO

  • Target Framework: .NET4
  • ОС: Windows XP 32bit
  • Windows 7 SDK установлен

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

Сделал чистую проверку иVisual Studio может построить полное решение, однако msbuild не может.

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

Проверены зависимости:

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

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

EDIT 4 Я запустил всю сборку из msbuild через LOG и взглянул на конкретную задачу для компиляции проекта, которая дает пробу.lems:

  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.

Насколько я могу судить, веб-приложение actall NOT включено в список литературы.

Ответы [ 9 ]

5 голосов
/ 13 мая 2015

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

3 голосов
/ 07 августа 2011

Очевидно, что это известная проблема в MSBuild, так как у большего количества людей есть проблемы с этим.Я до сих пор не получил действительный ответ от Microsoft по этому поводу, но обсуждение было продолжено здесь: http://social.msdn.microsoft.com/Forums/en-CA/msbuild/thread/434abf1a-30db-4b13-8062-13755898dd71

2 голосов
/ 13 августа 2013

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

Я сталкивался с этим несколько раз и обнаружил, что изменение Target Framework с клиентского профиля .NET Framework 4 на просто .NET Framework 4 помогает.

0 голосов
/ 09 августа 2018

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

0 голосов
/ 12 марта 2018

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

0 голосов
/ 10 августа 2017

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

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

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

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

Пакетный скрипт:

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 на сервере.

Пишите мне по любым вопросам, связанным с этим ..........

0 голосов
/ 20 июня 2016

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

0 голосов
/ 22 июня 2011

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

0 голосов
/ 22 июня 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...