0

多年来,我们通过在包含该项目所有源代码的目录中为每个平台创建项目,在这些平台之间共享我们的 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 项目。)

4

1 回答 1

0

在我们的例子中,中间 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>
于 2017-06-28T17:11:32.280 回答