【发布时间】:2015-04-12 03:57:15
【问题描述】:
我从一些 C++/CLI 代码中引用了第 3 方 .NET 库。我的 C++/CLI 调用代码正在使用 Obsolete 属性引用已在 C# 库中标记为过时的属性:
// C# External library code
using System;
namespace ExternalLibrary
{
public class Dependency
{
[Obsolete("Please use the new version.")]
public static bool IsInitialized
{
get { return true; }
}
}
}
但是,当我编译使用该属性的 C++/CLI 调用代码时,即使我将警告级别设置为 /Wall EnableAllWarnings,它也不会生成任何过时/弃用的警告(例如 C4947)。
如果我从 C# 代码中引用相同的 API,我会收到预期的 CS0618 警告,告诉我该属性已过时,但是当我编译 C++/CLI 代码时,我没有收到任何过时或弃用警告。
// C# Calling code (in another assembly)
namespace CalledFromCSharp
{
public class CSharpCode
{
public static void CallingCode()
{
// Generates warning CS0618:
// 'ExternalLibrary.Dependency.IsInitialized' is obsolete:
// 'Please use the new version.'
bool initialized = ExternalLibrary.Dependency.IsInitialized;
}
}
}
// C++/CLI Calling code (also in another assembly)
#pragma once
using namespace System;
namespace CppCode
{
public ref class CalledFromCpp
{
static void CallingCode()
{
// NO OBSOLETE WARNING GENERATED
bool isInitialized = ExternalLibrary::Dependency::IsInitialized;
};
};
}
这似乎发生在静态和非静态属性调用中。是否需要在我的 C++/CLI 项目(使用 Visual Studio 2013)中设置一些额外的东西才能显示适当的警告?还是有当前行为的原因?
【问题讨论】:
-
C++/CLI 永远不会产生
CS0618警告:CS表示 C#。它应该生成C4947,但看起来没有 VS2013 等效项。 -
好点!我编辑了原文以试图提高清晰度。
标签: .net c++-cli compiler-warnings api-design