VS 2017: ссылка на сборку обязательна - PullRequest
0 голосов
/ 17 января 2019

Кажется, что в VS 2017 проект, использующий перегруженный метод, должен иметь ссылки на все типы всех перегруженных методов, даже если он использует только один из этих перегруженных методов.

Например, рассмотрим ClassLibrary1 с классами ServicedComponent1 и SharedMethods:

Public Class ServicedComponent1
    Inherits EnterpriseServices.ServicedComponent
End Class

Public Class SharedMethods
    Public Shared Sub DoDispose(ByRef obj As Messaging.Message)
        obj.Dispose()
    End Sub
    Public Shared Sub DoDispose(ByRef obj As EnterpriseServices.ServicedComponent)
        obj.Dispose()
    End Sub
End Class

В ConsoleApp1, который ссылается на ClassLibrary1 и System.EnterpriseServices, у меня есть следующий модуль:

Module Module1
    Sub Main()
        Dim obj1 = New ClassLibrary1.ServicedComponent1
        ClassLibrary1.SharedMethods.DoDispose(obj1)
    End Sub
End Module

Когда я пытаюсь скомпилировать ClassLibrary1, я получаю следующую ошибку:

1>C:\temp\TestReferences\ConsoleApp1\Module1.vb(5,9): error BC30652: Reference required to assembly 'System.Messaging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' containing the type 'Message'. Add one to your project.

В VS 2010 ConsoleApp1 успешно компилируется, потому что я не использую первый перегруженный метод, который использует System.Messaging.Message. Я использую только System.EnterpriseServices.ServicedComponent, для которого у меня есть ссылка в ConsoleApp1. Кажется, что VS 2010 умнее, чем VS 2017, потому что он обнаруживает, что ссылка на System.Messaging не нужна.

  1. Почему VS 2017 требует ссылку на System.Messaging?
  2. Есть ли вариант, чтобы VS 2017 вел себя в этом отношении как VS 2010?
...