Windows формирует ссылки и синглтон с конфликтующим импортированным типом - PullRequest
0 голосов
/ 01 октября 2019

У меня есть решение со следующими проектами:

  • Модель: общий проект с моделью
  • Приложение 1: Приложение Windows Form
  • Приложение 2: ДругоеПриложение Windows Form

Я пытаюсь переместить некоторый UserControl, дублированный в настоящее время в обоих проектах, в общий проект, называемый CommonUI. Итак:

  • Модель
  • CommonUI: Модель ссылок
  • Приложение 1: Модель ссылок и CommonUI
  • Приложение 2: Модель ссылок и CommonUI

Но я получил много предупреждений, таких как:

Тип 'AppState' в '[..] Model \ AppState.cs' конфликтует с импортированным типом 'AppState' в '[..] CommonUI, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = ноль '. Использование типа, определенного в '[..] Model \ AppState.cs'

Проблема в том, что AppState - это Singleton, но он дублируется, App1 видит экземпляр, а CommonUI видит, что другой экземпляр теперь имеет Iу меня есть 2 класса с именем "AppState", один из эталонного App1-> Model, а другой из App1-> CommonUI-> Model.

Что я сделал не так? Спасибо

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Для дальнейшего использования в случае, если у кого-то возникнет такая же проблема.

«Проблемой» был общий проект. Общий проект напрямую внедряется в ссылочный проект, поэтому мой код был внедрен как в проект CommonUI, так и в проект App1. Проект CommonUI был скомпилирован в DLL (с ​​включенной моделью), которая использовалась exe-файлом App1, поэтому и exe, и DLL содержали код модели.

Переход от общего проекта к библиотеке классов решил проблему.

0 голосов
/ 01 октября 2019

AppState объявлен в Model, который является общим проектом. Общий проект не является библиотекой классов . Исходный код в общем проекте компилируется в каждый проект, который ссылается на него . Другими словами, если у вас есть, скажем, 3 проекта, ссылающихся на проект Model, вы объявите класс AppState 3 раза.

Решения заключаются в преобразовании Model в библиотеку классов,или переместите AppState куда-нибудь еще.

По моему опыту, лучше всего использовать Shared Projects только для небольших относительно несущественных частей кода утилит, которые должны быть встроены в исполняемый файл. Ссылка на них из библиотек или использование их в качестве библиотек порождает проблемы.

...