У нас есть проект 15-летней давности, который мы хотим перенести с Visual Studio 2010 на Visual Studio 2017. Проект отлично компилируется в VS 2010, но когда мы попытались перенести его на VS 2017, мы получили множество ошибок.
По сути, у нас есть Businesslayer с классом Security:
<Serializable()> Public MustInherit Class Security
Public Function GetPermission() As Boolean
End Function
End Class
Затем у нас есть Domainlayer с кучей классов, которые используют Security:
<Serializable()> Public NotInheritable Class DomainClass
Inherits BLL.Security
Shadows Function GetPermission() As Boolean
End Function
End Class
И, наконец, у нас есть проект Asp.Net, использующий функцию DomainClass:
Public Class PresentationLayerClass
Private m_Domain As Domains.DomainClass
m_Domain = new Domain.DomainClass()
m_Domain.GetPermission()
End Class
Очевидно, что у проекта Asp.net есть ссылка на домен, а у домена есть ссылка на Businesslayer. Когда мы компилируем это в VS 2017, мы получаем тысячи ошибок BC30653 на уровне представления:
BC30652 Reference required to assembly 'Business Logic Layer, Version=1.4.0.2, Culture=neutral, PublicKeyToken=null' containing the type 'Security'. Add one to your project.
Как решить эту проблему? Мы не хотим добавлять ссылку на Businesslayer в слой Asp.net. А почему в VS 2017 все по-другому?
[Edit:] Вещи, которые я пробовал:
Я попытался изменить ссылку на домены и ссылку BusinessLayer на DLL: s, но это не сработало. Спасибо за предложение.
Я просто хочу добавить, что я пробовал очистить и перестроить в меню «Сборка», и это тоже не помогло.
И что я попытался воссоздать проблему в небольшом тестовом решении в VS 2017 с тремя проектами выше и в основном с приведенным выше кодом, и я получаю там ту же ошибку, поэтому она не является специфической для нашего решения.





Думаю, я нашел ответ на свой вопрос в этой ветке:
Почему VS 2015 нужна ссылка на System.Data.Entity, а VS 2013 - нет?
Похоже, это связано с тем, как новый компилятор в VS 2015 обрабатывает транзитивные ссылки. Так что мне просто нужно будет добавить ссылку, которую он запрашивает.
Из небольшого чтения, которое я сделал по этому коду ошибки, это происходит в проекте VB, который ссылается на другой проект, но не в C# и не в VB, если вы ссылаетесь на DLL. Похоже, это может быть ошибка, и решение проблемы - ссылаться на скомпилированный вывод, а не на проект. Не идеально, но может потребоваться.