【问题标题】:Is it possible to connect xaml.cs to corrsponding xaml in VS2017 csproj format?是否可以将 xaml.cs 连接到 VS2017 csproj 格式的对应 xaml?
【发布时间】:2019-01-17 13:00:26
【问题描述】:

由于 NuGet 打包的巨大优势,我将 C# 库的 csproj 文件转换为新的 Visual Studio 2017 格式,如下所述: Old csproj to new csproj: Visual Studio 2017 upgrade guide.

现在我的 WPF 用户控件的所有 xaml.csxaml 文件都并排分开显示,而不是在一个结构中 (xaml.cs "inside" xaml)。此外,我无法通过上下文菜单命令“查看代码”或“查看设计器”在它们之间切换。

我发现我可以通过在csproj文件中添加适当的条目来解决结构显示:

<Compile Include="SomeView.xaml.cs">
  <DependentUpon>SomeView.xaml</DependentUpon>
</Compile>

保存csproj 文件后,需要一两秒钟,然后在项目浏览器视图中可视化这两个项目。 不过,我仍然无法通过上下文菜单命令在它们之间切换。

另外,我在编译时收到错误NETSDK1022,告诉我这些编译元素现在加倍了(新的项目格式会自动添加所有合适的文件)。可以通过将EnableDefaultCompileItems 设置为false 来禁用此机制,这很有效。

有没有更好的方法来“绑定”xaml 和新的 VS2017 项目格式的代码隐藏文件?

(也许这就是为什么新的项目格式还没有针对window项目发布的问题之一……)

【问题讨论】:

  • 您链接的文章清楚地说明了支持的项目类型列表。并告诉你wpf不是。您可以尝试 vs2019 预览版,但我认为最好等到您可以创建一个针对 .net core 3 的 wpf 应用程序并且它的模板有效。对于您打算发布的应用,现在冒险迁移到 net core 3 还为时过早。
  • @Andy 你是对的,它写在文章中。前段时间看了介绍....

标签: c# wpf xaml visual-studio-2017 csproj


【解决方案1】:

Include 替换为Update

从你的角度出发

新的项目格式会自动添加所有合适的文件

因为这一点,通常更喜欢使用Update 而不是Include。就是这个。

假设默认情况下包含所有文件,当您使用“包含”一词时,您添加的是一个已经存在的文件。但是如果你使用“更新”这个词,你就会更新已经包含的文件。

【讨论】:

  • 谢谢,这适用于项目资源管理器中的结构化视图。仍然无法通过上下文菜单在 xaml 视图和代码隐藏之间切换,但这并不是那么大的灾难。我要么接受它,要么恢复到旧的项目格式。
【解决方案2】:

我不认为针对 .NET Framework 的 WPF 项目正式支持切换到新的项目格式。但是,当您以 .NET Core 3 为目标时,Visual Studio 2019 将支持它。

这个新的Microsoft.NET.Sdk.WindowsDesktop SDK 使用preview 中可用的以下最小.csproj 文件构建.NET Core WPF 项目,包括XAML 文件:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <UseWPF>true</UseWPF>
    </PropertyGroup>
</Project>

更多信息请参考this博文。

【讨论】:

  • 感谢您提供此信息。现在切换到 .NET core 3 太微妙了,因为这个库只是整个应用程序的一小部分(如果可能的话,我不想混合使用)。但是 WPF 加入 .NET 核心的消息真是太好了!
猜你喜欢
  • 2019-05-08
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多