使.NET标准库COM-Visible?

时间:2017-07-01 13:01:33

标签: .net-standard

对于完整的.NET项目,您可以勾选一个框以使项目在Project Properties > Application tab > Assembly Information..中可见:

enter image description here

但是,对于.NET标准项目,Assembly Information..按钮不存在,而是在Project Properties > Package tab上输入了数据,但该标签没有Make Assembly COM-Visible的复选框{1}}:

enter image description here

您是否仍然可以通过其他方法使.NET标准库COM可见,或者出于某种原因这样做是否有意义?

2 个答案:

答案 0 :(得分:2)

我在GitHub上评论了你的问题。如果您选择的运行时支持.NET标准和COM可见性,那么您绝对可以使.NET标准库COM可见。

以下是使用Visual Studio 2017和WiX的示例: ComVisibleNetStandard

答案 1 :(得分:0)

@ZdeněkJelínek在这个问题的评论中提出了一个有趣的观点,即.NET标准应该是平台无关的,而COM本身就是特定于平台的。

为了测试该理论,我将the example of COM interop in the C# documentation中的代码放在完整的.NET解决方案和.NET标准解决方案中。这是代码:

using System.Runtime.InteropServices;

namespace project_name
{
    [Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
    public interface ComClass1Interface
    {
    }

    [Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), 
        InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ComClass1Events 
    {
    }

    [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
        ClassInterface(ClassInterfaceType.None),
        ComSourceInterfaces(typeof(ComClass1Events))]
    public class ComClass1 : ComClass1Interface
    {
    }
}

在完整的.NET编译中,在.NET标准中它编译得很好,但会触发此警告:

  

'ComInterfaceType.InterfaceIsIDispatch'已过时:'支持   IDispatch在将来的版本中可能不可用。'

所以刚开始确认它,目前你可以添加COM接口,但它们不应该在设计中存在。 However, that warning shows up in the dotnet standard github repo,似乎没有一个明确的结论,这些成员是否真的已经过时了。

此外,System.Runtime.InteropServices.ComVisibleAttribute出现在netstandard代码库中的this check in for a .NET Stansard 1.6 check in for the System.Runtime.Forwards.cs类中,但我不太了解代码库,无法知道它为什么存在。因此,我asked the question on the .NET Standard repo并在此报告答案。