【问题标题】:How to extract .NET project references into a separate file?如何将 .NET 项目引用提取到单独的文件中?
【发布时间】:2020-04-15 10:53:30
【问题描述】:

所以,我现在的一般设置是这样的: 我有一个可以访问的大型框架,它被用作一种货币化方式。在同一个解决方案中,我有使用该确切框架的 Xamarin.Android 应用程序。我必须这样做,因为该框架是与 Android 应用程序一起开发的,并且每次都进行 NuGet 引用管理或重新编译 .dll 不是一种选择。

在这个大型项目中还有另一个解决方案,它只引用 Xamarin.Android 应用项目。但不同之处在于,这个 Android 项目使用完全相同的 .cs 文件和所有这些文件,但本质上是来自更大解决方案的 .csproj 文件的副本。

它们之间的区别在于:一个使用对解决方案内部项目的直接引用,而其他引用由较大的解决方案生成的 .dll 文件。这是必需的,因为客户端应该可以访问较小的应用程序,但不能访问框架。

我现在明白,这个带有两个 .csproj 文件的解决方案在设计上是错误的,因为当我添加或删除任何文件时,我必须在两个地方删除它,问题是:处理引用的更好方法是什么安卓项目?

【问题讨论】:

  • 使用“共享代码”项目并将其引用到其他两个项目
  • @SushiHangover 您指的是“共享项目”,例如,一个没有引用且不生成 .dll 的项目?这将需要在项目中进行大量的结构更改,并且很难向客户解释,因为他看不到第二个项目。我正在寻找一种解决方案,让我只有一个 .csproj,对此有什么想法吗?
  • 是否可以选择创建一个单独的文件(例如common.stuff)并在两个csproj 文件中调用<import Project="common.stuff" /> (see here)?
  • @mu88 哇,我不知道这个机制!这就是我所需要的,有了这个“条件”属性和两个新的构建配置就可以了。非常感谢你!您能否发表您的评论作为答案,以便我将其标记为解决方案?

标签: c# .net xamarin xamarin.android


【解决方案1】:

构建系统 MSBuild 非常灵活,允许您做很多事情,例如。 G。从其他文件加载属性。只需打开现有的csproj 文件并搜索<Import Project="Import 允许您从另一个文件加载您需要的任何内容 - 可能是一个愚蠢的 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')" />

现在您可以将新的共享设置(文件、属性等)添加到common.stuff,并且所有项目也会自动获取它们。不幸的是,我不认为你可以通过像 Add → New Item... 这样的原生 Visual Studio 方式来管理它,所以你必须手动完成。但至少您应该能够将common.stuff 添加到您的解决方案中,这样您就不必切换应用程序(例如切换到 Notepad++)。

【讨论】:

  • 我已经做了很多预编译脚本和 .csproj 修改,所以这应该不是问题。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2017-03-28
相关资源
最近更新 更多