【发布时间】:2011-12-15 15:54:49
【问题描述】:
我有一个 VB 项目,并使用在线转换工具将其转换为 C#。现在的问题是xaml 和xaml.cs 文件没有相互连接,即它们无法识别它们的依赖关系(图中红色区域)。实际上它应该看起来像 Window1 文件(图像中的绿色区域。)我怎样才能做到这一点。
我正在尝试 WPF,所以可能是外行的问题。
【问题讨论】:
我有一个 VB 项目,并使用在线转换工具将其转换为 C#。现在的问题是xaml 和xaml.cs 文件没有相互连接,即它们无法识别它们的依赖关系(图中红色区域)。实际上它应该看起来像 Window1 文件(图像中的绿色区域。)我怎样才能做到这一点。
我正在尝试 WPF,所以可能是外行的问题。
【问题讨论】:
这很简单,尝试添加项目现有项目并在格式列表中选择 XAML(不是 .cs 等)文件。在 VS2010 中,这很有帮助。
【讨论】:
.xaml 文件。如果您有多个并全选,则它不会添加 .xaml.cs 文件 =(
如果您无法让 IDE 执行此操作(Papa John 的帖子),那么您可以通过编辑项目文件来执行此操作。
该信息在 .csproj 文件中(这是一个 XML 文件——您可以在文本编辑器中打开它,或者右键单击它,选择“卸载”,然后打开它——选择重新加载到再次将其作为项目加载)。
这是要查找的信息,您需要添加“DependentUpon”标签。
<Compile Include="TheFile.xaml.cs">
<DependentUpon>TheFile.xaml</DependentUpon>
</Compile>
【讨论】:
最简单的方法!!!
我也遇到了同样的情况。我找到了出路。以下是如何在解决方案资源管理器中获取嵌套在 .xaml 下的 .xaml.cs:
【讨论】:
使用 Xamarin PCL 解决方案:
1) 转到您的 PCL 文件夹并打开您的 MySolution.csproj 文件
2) 应该有几组<ItemGroup> 标签。其中一个声明<EmbeddedResource> 标签,另一个将包含<Compile> <DependentUpon></DependentUpon></Compile> 标签组。
3) 对于要链接的 MyPage.xaml 和 MyPage.xaml.cs 文件,您必须拥有一组声明您的 xaml 页面的 xml。
<EmbeddedResource Include="MyPage.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<LogicalName>MyPage.xaml</LogicalName>
</EmbeddedResource>
<Compile Include="MyPage.xaml.cs">
<DependentUpon>MyPage.xaml</DependentUpon>
</Compile>
请注意,如果您的页面位于文件夹中,您应该这样指定:
<Compile Include="Views\MyPage.xaml.cs">
<DependentUpon>MyPage.xaml</DependentUpon>
</Compile>
<EmbeddedResource Include="Views\MyPage.xaml">
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
<LogicalName>MyPage.xaml</LogicalName>
</EmbeddedResource>
请注意,这适用于 OSX 和 Windows
【讨论】:
根据 Kyle White 对官方Xamarin bug report 55591: .xaml files in .NETStandard library appear twice in solution explorer 的评论,我在链接的.NET Standard sample project by Oren Novotny 中找到了解决此问题的简单方法
在您的 .csproj 文件中,添加以下
<ItemGroup>
<Compile Update="**\*.xaml.cs" DependentUpon="%(Filename)" />
<EmbeddedResource Include="**\*.xaml" SubType="Designer" Generator="MSBuild:UpdateDesignTimeXaml" LogicalName="%(Filename)%(Extension)" />
</ItemGroup>
之后,项目结构中的所有 xaml 文件将自动显示在解决方案资源管理器窗口中 - 即使您将添加新的 xaml 文件。
这个魔法是如何工作的?
ItemGroup 中的Compile 元素使用通配符遍历所有目录,搜索.xaml.cs 文件并将它们标记为依赖于xaml 文件同名。请注意,这只是因为用于DependentUpon 元素的%(Filename) 项目元数据包含最左边的文件扩展名,按照惯例,它与xaml 文件的名称匹配。
EmbeddedResource 元素会将所有xaml 文件包含到项目中,以便它们在解决方案资源管理器窗口中可见,同时将它们标记为Designer 文件,并声明@ Xamarin.Forms NuGet 包中定义的 987654331@ 目标应用于从标记文件生成代码。
【讨论】:
使用 Xamarin 共享代码解决方案:
1) 卸载共享项目后转到您的项目文件夹
2) 找到 projiitems 文件并编辑添加 DependentUpon 标记,如上面其他答案中所述。
3) 保存文件
4) 返回 Visual Studio,您应该会看到一个对话框,允许您重新加载所有项目或再次打开项目。
【讨论】:
Xamarin Forms 项目更简单、更快捷的解决方案,根本不需要接触 csproj 文件,非常快速的修复。
确保您已为解决方案资源管理器选择了 Show All Files - 默认情况下它可能处于启用状态。
Exclude from Project
Include in Project
它们现在应该都已正确嵌套,并且 .csproj 文件所需的所有更改都将完成。
在此之后您可能会遇到InitializeComponent() does not exist in the current context) 错误。
如果是这种情况,简单的解决方法是..
Build Action从Page更改为Embedded Resource
【讨论】:
如果您获得了嵌套文件 VS 扩展,您可以通过右键单击类似名称的文件并选择“自动嵌套”来执行此操作,也可以手动嵌套。
https://marketplace.visualstudio.com/items?itemName=MadsKristensen.FileNesting
【讨论】:
在共享项目中有 .shproj 文件而不是 .csproj 文件,并且 和 项目不存在那里。 但是我发现还有一个 .projiitems 文件,并且如上所述在其中添加一个部分导致 .xaml 和 .cs 文件被链接
【讨论】:
我能够重新启动 Visual Studio for Mac 2019 v16.2,它重新连接了我应该连接的 .xaml 和 .cs 文件。
如果这不起作用,Hitsa 的解决方案在另一个场合也对我有用。
【讨论】:
通常 - 关闭 Visual Studio,删除解决方案根文件夹中的 vs 文件夹,然后重新打开 Visual Studio (2019) 对我有用。
【讨论】:
对于 VS 2019,您只需编辑 .csproj 文件并消除对 .xaml.cs 文件的所有引用 es:
<ItemGroup>
<Folder Include="Models\" />
<Folder Include="Services\" />
<Folder Include="ViewModels\" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Views\MyPage.xaml">
<LogicalName>MyPage.xaml</LogicalName>
</EmbeddedResource>
</ItemGroup>
【讨论】: