Является ли перемещение общедоступного свойства в базовый класс критическим изменением в общедоступном API?C#

Место общения программистов C#
Ответить
Anonymous
 Является ли перемещение общедоступного свойства в базовый класс критическим изменением в общедоступном API?

Сообщение Anonymous »

Я столкнулся с проблемой, с которой раньше не сталкивался.
Я использую стороннюю сборку, которая поставляется в двух разных версиях. Я компилирую один из них и загружаю правильную версию во время выполнения.
Версия, с которой я компилировал, выглядит как (V2.0.0)

Код: Выделить всё

public class A { public int P1 { get; set; } }
public class B : A { public int P2 { get; set; } }
Тот, который я загрузил во время выполнения, выглядит как (V1.0.0)

Код: Выделить всё

public class A { public int P1 { get; set; } public int P2 { get; set;} }
public class B : A { }
Код в вызывающей сборке выглядит так:

Код: Выделить всё

public static void Main() {
var b = new B();
b.P2 = 3;
}
К моему удивлению, b.P2 терпит неудачу при загрузке V1.0.0 во время выполнения.
Интуитивно я могу это понять. В скомпилированной версии есть ссылка на B::P2, которой не существует, но это также кажется странным, поскольку B::P2 находится в общедоступном API B и то, что он реализован в A::P2, является деталью, которая не должна это (или я надеялся, что это не должно) иметь значение.
Я, конечно, могу решить эту проблему путем «перекомпиляции» правильной версии, но тогда я предполагаю, что проблема будет с V2.0.0 вместо этого.
Есть ли способ избежать наличия двух версий моего приложения?
Если это имеет значение, сторонняя сборка — это .NetFramework, а моя код — DotNet 8.

Подробнее здесь: https://stackoverflow.com/questions/791 ... public-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»