2015-09-26 114 views
2

我有一個.NET 4.0構建的C#項目,對.NET 4.5構建的項目具有軟/間接依賴關係(通過反射)。當我構建.NET 4.0項目時,自動構建.NET 4.5項目?它不需要被引用

我試圖找出my40project.csproj中的條目,當我構建my40project.csproj時,將生成my45project.csproj。儘管如此,我做的不是需要在4.0項目中引用生成的DLL。

我在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". 

有誰知道我可能會解決這個問題?我很抱歉,如果這是重複的;搜索時發現的問題涉及直接使用4.0項目中生成的.NET 4.5 DLL,我不需要這樣做(我只需要需要構建它)

謝謝!

+1

你不能那樣做。 –

+1

根本沒有引用該項目,只是複製輸出DLL的反射 – Steve

+0

你不能引用較低版本到較高版本,但反之亦然。因爲,許多系統不支持前向兼容性,但是向後兼容性是。 –

回答

0

由於該項目不必直接引用,您可以選擇使用Post Build事件來複制dll。基本上你保持這兩個項目在一個解決方案(不相互引用),而且你配置後生成的4.5項目的事件,包括像

copy /Y "source.dll" "destination" 

這將確保該dll,你的項目4.0將在每個完整解決方案構建之後始終使用最新版本。

編輯: 解決方案文件

的Microsoft Visual Studio解決方案文件,格式版本12.00

的Visual Studio 14 VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1

項目(「{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> ------重建所有開始:項目:測試2,配置:調試任何CPU ------
1>測試 - > ------ \測試。exe
2> test2 - > ------ \ test2.exe
==========重建全部:2成功,0失敗,0跳過========= =

+0

複製DLL不是問題(我知道該怎麼做),但是如果你在同一個解決方案中包含項目,則觸發一個預構建事件來構建4.5項目,或者開始構建4.0項目 – Benjin

+0

@Benjin將在您執行解決方案構建時生成 – Steve

+0

您可以發佈示例嗎?標準項目引用(如帖子中的引用)將嘗試對其進行編譯(好),但看到引用是.NET 4.5而不是<= 4.0,因此失敗(錯誤)。 – Benjin