这是我发现可以抑制此警告的方法,主要基于此处的评论:https ://social.msdn.microsoft.com/Forums/vstudio/en-US/7a7c352b-20cb-4931-b3b5-27e899016f75/turning-off -msbuild-warnings-msb3305?forum=msbuild
IanG 发布的相关详情:
虽然一般来说,修复潜在问题是修复警告的最佳方法,但当潜在的“问题”是 Microsoft 提供的构建工具不喜欢 Microsoft 提供的库时,这是不可能的。
...
这里的困难在于,MSBuild 在这里确定的“问题”根本不是真正的问题。它只是告诉我们导入的库包含一些功能,如果您选择使用它们,在 .NET 世界中会出现问题。不幸的是,即使您的代码没有使用任何有问题的位,它也会生成这些警告。在导入未考虑 .NET 设计的类型库时,这是完全正常的。只要您的 C# 代码从不尝试使用这些功能,您就可以了。
...
我找到了一种阻止警告出现的方法,但我不确定它有多可靠,因为它使用了一个我没有找到任何直接文档的功能,以及我发现的唯一相关的东西带有此警告:“此 API 支持 .NET Framework 基础结构,不打算直接从您的代码中使用。”
我已将其添加到 .csproj 文件顶部的 PropertyGroup 中:
<ResolveComReferenceSilent>True</ResolveComReferenceSilent>
我无法直接找到此文档,但查看 SDK 中的目标文件,您会发现这会影响以下属性:http:
//msdn.microsoft.com/en-us/library/microsoft。 build.tasks.resolvecomreference.silent(v=vs.110).aspx
但这是一个警告,这是供内部使用的。
也就是说,我没有直接使用不受支持的设置:我通过这个属性使用它。虽然我没有找到任何关于该房产本身的文档,但至少有一页告诉您有关该房产的信息。虽然它是针对一种完全不同的项目,
但http://msdn.microsoft.com/en-us/library/windows/hardware/jj659905(v=vs.85).aspx
确实建议使用它来删除来自COM 参考。
其中一个链接将您带到在 UWP 应用程序和桌面应用程序之间共享编译的二进制文件,简洁地说:
如果您看到 COM 引用导致的警告,请将以下内容添加到<PropertyGroup>
标记中:
<ResolveComReferenceSilent>true</ResolveComReferenceSilent>
即使这是特定于 UWP 的信息,它似乎在非 UWP 项目中也能正常工作。
为了在我自己的项目中实现这一点,我在文件的现有部分PropertyGroup
下方添加了一个新的:COMReference
CSPROJ
<ItemGroup>
<COMReference Include="SomeVB6Library">
<Guid>{.......}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<PropertyGroup>
<!-- ResolveComReferenceSilent is to remove warning MSB3305 -->
<ResolveComReferenceSilent>true</ResolveComReferenceSilent>
</PropertyGroup>
请注意,无论出于何种原因,我每次构建库时都没有看到生成的警告,只是有时。但是,每当我清理并重建整个解决方案时,它似乎总是会出现。直到我意识到我不相信这是否按预期工作。但它似乎做到了。
我不确定这是否会产生任何其他不良影响 - 例如抑制您可能实际需要查看的其他警告。我会仔细测试。