如果我有下面的類在.NET 3.5,C#項目:奇怪的警告C4691
namespace ClassLibrary1
{
public class Class1
{
public static void Method1(Func<int> func)
{
}
public static void Method2()
{
}
}
}
我嘗試從.NET 4.0使用,C++/CLI的項目,像這樣:
#include "stdafx.h"
using namespace System;
using namespace ClassLibrary1;
int main(array<System::String ^> ^args)
{
Class1::Method2();
return 0;
}
的C++/CLI項目編譯以下警告:
警告C4691: '系統::功能':類型引用是EXPE導入 未引用程序集'System.Core',當前定義的類型爲 而不是使用的翻譯單元2>此診斷髮生時 從程序集導入類型'ClassLibrary1 :: Class1' 'ClassLibrary1,Version = 1.0.0.0,Culture = neutral , PublicKeyToken = null'。
請注意,使用此庫的類似.NET 4.0 C#項目將在不發出警告的情況下進行編譯,因此這僅針對C++/CLI。從項目中引用System.Core不會刪除警告。這個警告在一般情況下似乎很有用,所以我不願意禁用它,還有什麼我可以做的嗎?
這在Visual Studio 2012和2013年
我認爲它試圖說它期望在System.Core的3.5版本中找到System.Func。但是因爲你沒有引用它,所以它使用了4.0定義。你可以嘗試庫中的其他系統類型,看看你是否得到相同的警告。 – user957902 2015-01-20 22:33:38
編譯器是否應該在查找可能的方法重載時發出診斷信息,並且因爲它不知道該方法是什麼而不能確定它是否屬於語言規範的一部分。這在最新版本的C#編譯器中也有所變化,並且有很多關於它的問題。當然無足輕重。 – 2015-01-21 15:37:26