2016-12-14 2 views
1

У меня есть некоторая база кода, из которой я хочу построить библиотеку .NET Core и библиотеку UWP. Первоначально я хотел создать единый lib, который служил бы для обоих, но я не нашел для этого пути (в случае UWP lib должен ссылаться на определенные классы UWP, такие как StreamSocket).Может ли два файла project.json совместно использовать одну и ту же кодовую базу?

Поэтому я создал отдельный файл проекта для UWP. Однако, похоже, я не могу создать отдельный project.json (я не могу иметь core.json и uwp.json, потому что имя project.json является постоянным). И я не хочу создавать несколько копий моей базы кода (каждый со своим собственным project.json) в другой папке, я бы предпочел сохранить одну копию.

Возможно ли это как-то?

ответ

1

Чистейший путь для достижения этой цели будет иметь три библиотеки:

MyLib.Common 
MyLib.Core 
MyLib.Uwp 

хранить все совместно, платформы с нейтральным кодом в MyLib.Common и эталонный, что из двух проектов для конкретных платформ. Таким образом, у вас мало или нет дублирования кода, и вы также можете без проблем ссылаться на UWP-специфические библиотеки из проекта UWP.

Возможно, вы также сможете получить два проекта для ссылки на те же файлы .cs (и избавиться от совместного проекта), но это кажется мне более хакерским.

+0

Боюсь, что я не упомянул (ради краткости), что на старых объектах Visual Studio и .NET Framework (например, .NET Framework 2.0) на самом деле существует гораздо больше целей, и они не могут использовать концепцию общей библиотеки. Поэтому я не могу перестроить свой проект таким образом. – Alex

0

Ну, похоже, проекты UWP и .NET Core могут использовать один и тот же project.json. Его раздел «рамка» выглядит следующим образом:

"frameworks": { 
    "netstandard1.3": {}, 
    "uap10.0": { 
    "dependencies": { 
     "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2" 
    } 
    } 
}, 

Поскольку проект UWP имеет свой собственный файл csproj, это приводит к созданию 3 библиотеки DLL: project.json вызывает netstandard1.3 и uap10.0 папки отображаются в бункере/Debug (и размещает библиотеки DLL там) при создании проекта .NET Core, тогда как сам проект UWP создает еще одну DLL прямо в bin/Debug.

bin/Debug/uap10.0/My.dll - это мусор, он не может содержать какой-либо код, специфичный для UWP (поскольку универсальная ссылка Windows недоступна в проектах .NET Core), и поэтому я не определяю WINDOWS_UWP в проекте .json's "uap10.0".

Однако файл UWP csproj определяет WINDOWS_UWP, а в этом проекте доступна универсальная Windows. Так что, когда проект UWP будет построен, он фактически использует только это:

"uap10.0": { 
    "dependencies": { 
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2" 
    }, 

(если этот код отсутствует в project.json, проект UWP не будет строить). Остальная часть project.json (в основном специфическая для цели «netstandard1.3») не вредит процессу сборки.

Поэтому я полагаюсь на то, что я могу определить условные директивы (WINDOWS_UWP в данном случае) не только в файле project.json, но и в файле csproj, и, таким образом, получить дополнительные результаты при обработке проекта UWP, который использует тот же проект .json как проект .NET Core. В некоторой степени UWP csproj выступает в качестве другого project.json, который сливается с реальным во время процесса строительства.

Да, я получаю дополнительный DLL-файл/Debug/uap10.0/My.dll, который бесполезен (просто пустая трата времени компилятора), но тогда я выберу только те выходы, которые полезны для так что это не проблема в моем конкретном случае.

Смежные вопросы