【问题标题】:How to Multi target a library project with WPF controls如何使用 WPF 控件多目标库项目
【发布时间】:2018-04-05 17:08:26
【问题描述】:

我有一个需要针对 .NET 3.5 和 .NET 4.0 的类库项目,现在完成的方式是为每个目标框架创建单独的项目并将每个项目中的文件链接到同一源的典型方式。

我想利用 .NET Core 项目中出现的新 csproj 格式,因为新 csproj 格式的多目标更简单。

我创建了一个新的类库 (.NET Core) 项目并开始尝试移植我现有的库。

我真的不需要定位.netcoreapp2.0,所以我的目标框架看起来像这样

<PropertyGroup>
  <TargetFrameworks>net35;net40</TargetFrameworks>
</PropertyGroup>

我有以下代码块来帮助.NET 3.5 oddities 使用新的 csproj 格式。

<PropertyGroup>
  <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net35'">C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client</FrameworkPathOverride>
</PropertyGroup>

到目前为止一切顺利。事情开始走下坡路的地方是我的类库有 WPF 控件。我收到编译错误,因为它找不到 System.Windows 和其他 WPF 相关项目。

我发现我可以添加对其他 Windows 程序集的引用,所以我添加了以下内容

<ItemGroup>
  <Reference Include="PresentationFramework" />
  <Reference Include="PresentationCore" />
  <Reference Include="WindowsBase" />
</ItemGroup>

这消除了我的大部分错误,但现在我收到了像The name 'InitializeComponent' does not exist in the current context这样的错误

【问题讨论】:

  • 您启动了一个针对 .NET Framework 4.0 的 .NET Core 项目?这是没有意义的。此外,.NET Core 上不存在 WPF,因此它更没有意义
  • @CamiloTerevinto 是否有另一种项目类型可以利用新的 csproj 文件格式,让您可以轻松地使用单个项目实现多目标?如果是这样,我会使用它。

标签: c# wpf csproj multitargeting multi-targeting


【解决方案1】:

从 .NET 4.0 开始,一些 WPF 项目已迁移到新库 System.Xaml

只有在构建 .NET 4.0 目标时才会引发错误 The name 'InitializeComponent' does not exist in the current context

要解决这个问题,需要将以下块添加到 csproj 文件中

<ItemGroup Condition="'$(TargetFramework)'=='net40'">
  <Reference Include="System.Xaml" />
</ItemGroup>

另外,xaml页面需要构建成页面,所以csproj文件中也需要添加以下内容

所有需要编译为页面的 xaml 文件。

<ItemGroup>
  ...
  <Page Include="Path\to\SomeWindow.xaml" />
  <Page Include="Path\to\SomeOtherWindow.xaml" />
  ...
</ItemGroup>

这将从您的解决方案资源管理器中删除 xaml 文件,因此找到了一种解决方法 here,它添加了以下块来构建 xaml 页面,但仍显示在解决方案资源管理器中。

<ItemGroup>
  <Page Update="@(Page)" SubType="Designer" Generator="MSBuild:Compile" />
</ItemGroup>

<ItemGroup>
  <None Include="@(Page)" />
</ItemGroup>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多