代码之家  ›  专栏  ›  技术社区  ›  TJ Rockefeller

如何使用WPF控件多个目标库项目

  •  4
  • TJ Rockefeller  · 技术社区  · 6 年前

    我有一个需要瞄准的类库项目。净额3.5和。NET 4.0,现在的做法是按照每个目标框架创建单独的项目,并将每个项目中的文件链接到同一个源。

    我想利用已经推出的新csproj格式。NET核心项目,因为使用新的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

    1 回复  |  直到 6 年前
        1
  •  3
  •   TJ Rockefeller    6 年前

    某些WPF项迁移到新库 System.Xaml 从开始。净额4.0

    错误 The name 'InitializeComponent' does not exist in the current context 仅当。NET 4.0目标正在构建中。

    要解决此问题,需要将以下块添加到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>
    
    推荐文章