【问题标题】:Sharing C# code among WPF, UWP, Phone 81 and Compact Framework在 WPF、UWP、Phone 81 和 Compact Framework 之间共享 C# 代码
【发布时间】:2017-12-01 02:43:12
【问题描述】:

多年来,我们通过在包含该项目所有源代码的目录中为每个平台创建项目来在这些平台之间共享我们的 C# 代码。当我们添加新平台时,如果包含的代码文件无法在新平台上编译,我们将创建代码文件的副本并对其进行修改,以便它可以在预期的平台上运行。

项目目录可能如下所示

Application.Base
    Applications.Base.CF.csproj
    Applications.Base.WPF.csproj
    Applications.Base.Phone81.csproj
    Properties
        AssemblyInfo.cs
    Src
        WidgetWPF.cs
        WidgetPhone81.cs
        Widget.cs

现在我对 UWP 采用相同的方法,但我遇到了这个问题。为 UWP 添加新项目时:

Application.Base
    ....
    Applications.Base.UWP
    Properties
        AssemblyInfo.cs
        DSI.Applications.Base.UWP.rd.xml
    ...

现在,当我转到我的 WPF 解决方案时,我在编译 Applications.Base.WPF 项目时遇到错误(尽管 WPF 项目中没有包含 UWP 项目文件):

您的项目未引用“.NETFramework,Version=v4.6.1”框架。在 project.json 的“frameworks”部分添加对“.NETFramework,Version=v4.6.1”的引用,然后重新运行 NuGet 还原。 DSI.Applications.Base

经过一些 A/B 测试,我发现我可以通过使用 nuget 删除 UWP 对 Microsoft.NETCore.UniversalWindowsPlatform 的引用来修复错误。当然,这破坏了 UWP 项目。根本没有 project.json。

是否有一种解决方法可以让我们继续以这种方式共享代码?重构我们的共享项目以适应所有平台将是一个巨大的负担 - 有许多这样的共享项目 - 其中一些甚至共享到其他平台(我们的 ASP.Net 项目。)

【问题讨论】:

  • 您能分享一个minimal reproducible example 来重现您的问题吗?此外,您是否尝试过按照错误所述重新定位“.Net Framework 4.6.1”?
  • 我正在调查重新定位。错误中没有引用 project.json 文件。

标签: .net wpf uwp code-sharing


【解决方案1】:

在我们的例子中,中间 obj 文件夹是罪魁祸首。仅当 UWP 构建的工件留在 obj 文件夹中时,构建 WPF 项目才会失败。该错误确实导致了我的问题,但不是直接的。如错误所示,项目目录中没有project.json文件,但在obj文件夹中有一个project.assets.json文件。我在新的 WPF 构建之前删除了所有 obj 内容并且它成功了。

为了适应我们的共享目录,我通过修改项目文件将 UWP 构建的中间(和 bin)目录更改为 objUWP。在VS 2017中没找到直接做的方法,所以直接修改了项目xml:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>binUWP\Debug\</OutputPath>
    <BaseIntermediateOutputPath>objUWP\</BaseIntermediateOutputPath>
    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2016-06-09
    • 1970-01-01
    • 2011-03-09
    • 2023-03-17
    相关资源
    最近更新 更多