2015-09-26 3 views
2

У меня есть проект C#, который строит с .NET 4.0, который имеет мягкую/косвенную зависимость (через отражение) в проекте, который строит с .NET 4.5.Autobuild проект .NET 4.5, когда я создаю проект .NET 4.0? Его не нужно ссылаться

Я пытаюсь вычислить запись в my40project.csproj, которая будет строить my45project.csproj при построении my40project.csproj. Я хочу, чтобы не, но ссылаться на полученную DLL в проекте 4.0.

я следующая запись в my40project.csproj:

<ProjectReference Include="$(RootDir)\path\to\project\my45project.csproj"> 
    <Project>{some guid}</Project> 
    <Name>my45project</Name> 
</ProjectReference> 

Однако это дает следующее сообщение об ошибке:

"D:\path\to\project\my40project.csproj" (default target) (1) -> 
(ResolveAssemblyReferences target) -> 
    error SCP3000: A non-baseline warning (MSB3274) was encountered: The primary reference "my45project.dll" could not be resolved because it was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0". 

Кто-нибудь знает, как я мог бы решить эту проблему? Прошу прощения, если это дубликат; вопросы, найденные при поиске, напрямую связаны с использованием библиотеки .NET 4.5 DLL в проекте 4.0, что мне не нужно делать (I только нужно, чтобы он был построен)

Спасибо!

+1

вы не можете этого сделать. –

+1

вообще не ссылайтесь на этот проект, просто скопируйте выходную dll для отражения – Steve

+0

, вы не можете ссылаться на более низкую версию на более высокую версию, но можете сделать наоборот. Поскольку передовая совместимость не поддерживается во многих системах, но обратная совместимость. –

ответ

0

Поскольку проект не требует прямой ссылки, у вас есть возможность использовать событие Post Build для копирования dll. В основном вы держите оба проекта в одном решении (не ссылаться друг на друга), и вы конфиг Пост Строить событие проекта 4.5 включить что-то вроде

copy /Y "source.dll" "destination" 

это будет убедиться, что DLL, которые ваш проект 4,0 будет использовать всегда последнюю версию после каждой полной сборки решения.

Edit: решение файл

Microsoft Visual Studio Solution файла, формат Версия 12,00

Visual Studio 14 VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1

Project ("{FAE04EC0 -301F-11D3-BF4B-00C04F79EFBC} ") =" Test "," Test \ Test.csproj "," {F6B2FFFE-AEBD-4D47-99F6-B4EFD200E50A} "
EndProject
проекта ("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "test2", "test2 \ test2.csproj", "{AD7D893B-7113-4E96-8CC1-0321E576B2A2}"
EndProject

проект 1 Цель:

<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> 

проект 2 цели:

<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 

и построить раствор

1> ------ Перестроить Все начато: Проект: Тестирование, Конфигурация: Отладка Любой CPU ------
2> ------ Перестроить Все начато: Проект: test2, Конфигурация: Отладка Любой CPU ------
1> Тест -> ------ \ Test.exe
2> test2 -> ------ \ test2.exe
========== Перестроить все: 2 удачных, 0 не удалось, 0 пропущено ========= =

+0

Копирование DLL не является проблемой (я знаю, как это сделать), но запускает событие prebuild для создания проекта 4.5 до или начинает создавать проект 4.0 – Benjin

+0

@Benjin, если вы включаете проект в одно и то же решение, оно будет построен, когда вы выполните сборку решений. – Steve

+0

Можете ли вы опубликовать пример? Стандартная ссылка на проект (например, одна в сообщении) попытается скомпилировать ее (хорошо), но посмотрите, что ссылка .NET 4.5 вместо <= 4.0 и, следовательно, сбой (плохой). – Benjin

Смежные вопросы