Как извлечь. NET ссылки на проект в отдельный файл? - PullRequest
1 голос
/ 15 апреля 2020

Итак, мои общие настройки сейчас выглядят так: у меня есть большой фреймворк, который доступен для меня и используется как способ монетизации. В том же решении у меня есть приложение Xamarin. Android, которое использует именно эту среду. Я должен был сделать это, потому что инфраструктура разрабатывается вместе с приложением Android и делает управление ссылками NuGet или перекомпиляцию .dll каждый раз, не вариант.

В этом большом проекте есть еще одно решение, которое ссылается только на проект приложения Xamarin. Android. Но разница в том, что этот Android проект использует те же самые точные файлы .cs и все такое, но имеет, по сути, копию файла .csproj из более крупного решения.

Разница между ними такова: один использует прямые ссылки на проекты внутри решения и другие ссылки .dll-файлы, созданные более крупным решением. Это необходимо, потому что клиент должен иметь доступ к меньшему приложению, но не к платформе.

Теперь я понимаю, что это решение с двумя файлами .csproj является ошибочным по замыслу, потому что, когда я добавляю или удаляю любой файл, я должен удалить его в двух местах, и возникает вопрос: что является лучшим способом обработки ссылки в этом Android проекте?

1 Ответ

1 голос
/ 15 апреля 2020

Система сборки MSBuild достаточно гибкая и позволяет выполнять множество задач, например загружать свойства из других файлов. Просто откройте существующий файл csproj и найдите <Import Project=". Импорт позволяет загружать все, что вам нужно, из другого файла - может быть, это тупое свойство MSBuild или добавление файла с <Compile Include="Class1.cs" />. И Visual Studio, и MSBuild заботятся об этом.

Исходя из этого, ваше решение может выглядеть следующим образом:

Общий файл common.props:

<PropertyGroup>
  <OutputPath>bin\x64\Release\</OutputPath>
</PropertyGroup>
<ItemGroup>
  <Reference Include="System.Xml" />
</ItemGroup>
<Compile Include="SharedClass1.cs" />
<Compile Include="SharedClass2.cs" />

В начале каждого потребляемого csproj файла:

<Import Project="common.props" Condition="Exists('common.props')" />

Теперь вы можете добавить новые общие настройки (файлы, свойства и т. Д. c.) В common.stuff, и автоматически все проекты получат их также. К сожалению, я не думаю, что вы можете управлять этим с помощью встроенного в Visual Studio способа, например Добавить → Новый элемент ... , поэтому вы должны сделать это вручную. Но по крайней мере вы должны иметь возможность добавить common.stuff в свое решение, чтобы вам не приходилось переключать приложения (например, в Notepad ++).

...