【问题标题】:Property not recognized or not accessible error when loading VS2010 project into Expression Blend将 VS2010 项目加载到 Expression Blend 时出现属性无法识别或无法访问的错误
【发布时间】:2012-04-13 18:23:36
【问题描述】:

我在 VS2010 中有一个使用 XAML 的项目,现在我需要将它加载到 Expression Blend 4 中。该项目在 VS2010 中构建和运行,这是它第一次加载到 Blend。即使无法识别成员,它也会在 Blend 中构建和运行。

为什么无法识别 Scale 属性,为什么它在功能上工作时显示为错误?

编辑虽然它会构建并运行,但 XAML 不会在 Blend 中以图形方式显示,因此非技术用户无法修改。

在许多包含对用户控件的引用的 .xaml 文件中,有一个 Blend 无法识别的属性并出现以下错误:

The member "XXXX" is not recognized or is not accessible

该属性存在于 .cs 代码隐藏文件中,并且每种情况下的错误消息都是相同的。

我在互联网上查看了很多可能的答案,但没有一个是解决方案。引用的项目不是只读的。各种类和属性是公共的。我还在 .csproj 文件中添加了以下 WPF 引用,但该文件已丢失。

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

在以下代码中,无法识别 Scale 属性,即使它作为属性存在于用户控件中。

这是 MyLogo.xaml 中的 UserControl:

<UserControl x:Class="NamespaceX.NamespaceY.UI.Shapes.MyLogo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="132" Width="105">
<Canvas>
    <Canvas.LayoutTransform>
        <ScaleTransform x:Name="st" CenterX="0" CenterY="0" />
    </Canvas.LayoutTransform>
    <Image Source="/Client;component/Images/MyLogo.png"/>
</Canvas>

这是 MyLogo.xaml.cs 中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace NamespaceX.NamespaceY.UI.Shapes
{
/// <summary>
/// Interaction logic for MyLogo.xaml
/// </summary>
public partial class MyLogo : UserControl
{
    public double Scale
    {
        get
        {
            return st.ScaleX;
        }
        set
        {
            st.ScaleX = value;
            st.ScaleY = value;
        }
    }

    public MyLogo()
    {
        InitializeComponent();
    }
}
}

在我的 Navigation.xaml 文件中,我有这个:

<UserControl x:Class="NamespaceX.NamespaceY.UI.UserControls.Navigation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shape="clr-namespace:NamespaceX.NamespaceY.UI.Shapes"    
Height="185" Width="1280" Loaded="UserControl_Loaded">
<FrameworkElement.Resources>
    <ResourceDictionary Source="../Resources/Main.xaml" />
</FrameworkElement.Resources>
<Canvas>
    <shape:MyLogo Scale="1.2" Height="181.483" Canvas.Left="38" Canvas.Top="4" Width="188" />
    <StackPanel Canvas.Left="205" Canvas.Top="-2" Width="1062">

    </StackPanel>
</Canvas>

【问题讨论】:

    标签: wpf visual-studio visual-studio-2010 expression-blend expression-blend-4


    【解决方案1】:

    这是解决方案。在应用程序的 .csproj 文件中,更改以下内容:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    

    到这里:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    

    不要被 Visual Studio 报告您在配置管理器中更多地在 AnyCPU 中运行的事实所迷惑。您必须手动编辑 .csproj 文件。

    【讨论】:

    • 这个设置与上面的错误无关。我的项目在 .csproj 文件中默认有 AnyCPU,我仍然面临这个错误:)
    • 是的,这有什么关系?
    • 这个答案似乎与问题无关。
    • 它工作得非常好,虽然我看不到任何相关的东西:)
    • 我同意它一开始看起来很傻,但我会在我遇到它时确认它解决了同样的问题。起初我没有意识到问题出现在我一直在为 x86、x64、AllCPU 构建构建之后没有更改的文件上。但果然,Visual Studio 将所有内容显示为 AllCPU,但 .cproj 文件在几个地方显示 x64。我关闭了解决方案,修复了 cproj 并重新打开/清理/构建,一切都恢复到属性可访问性。我只能说“真是个侦探布赖恩·莱明”
    【解决方案2】:

    它们的相关之处在于更改平台会更改缓存的程序集。接受的答案是不可接受的。

    这是我推荐的:

    1. 关闭所有文件
    2. 清洁溶液
    3. 重建解决方案

    受影响的 XAML 现在应该没有构建错误了。

    这对我有用,你的结果可能会有所不同。

    【讨论】:

      【解决方案3】:

      将项目的构建属性更改为“任何 CPU”为我解决了这个问题。我仍然无法理解这与问题有什么关系。但它当然起到了神奇的作用。

      【讨论】:

        【解决方案4】:

        正如其他人所说,将目标从 x64 更改为 AnyCPU 修复了设计器中的错误,这看起来很奇怪。

        我在 Visual Studio 论坛上发现了以下内容:

        (Q) 当文档包含自定义元素(例如,带有用户控件的 XAML)时,x64 和 ARM 目标平台的设计视图不可用。

        (A) 从 Visual Studio 2015 开始,我们使您能够设计/创作您的 XAML,即使您的目标是 x86 以外的任何对象。 Visual Studio 2015 Update 2 应该汇集了一些修复和更改,以使这种体验更好地发挥作用。

        但是,值得注意的是,当项目针对 x86 以外的任何对象时,我们将无法执行您可能在设计器中编写的任何代码。这是因为 x86 进程(XAML 设计器是)无法运行 ARM 或 x64 代码的限制。您应该能够查看和编辑页面上的所有 XAML,并将任何自定义类型替换为替换项,以尽可能保留所见即所得的体验(并在您真正关心在设计器中运行代码时切换到 x86)。

        【讨论】:

          【解决方案5】:

          我在 Silverlight 上遇到了同样的问题,原来是我的用户控件上的命名空间太长了,我只是把它缩短了,它可以工作。希望对您有所帮助!

          【讨论】:

            【解决方案6】:

            我能够通过 VS2012 中的 vb.net 项目一致地重现/修复此问题。 在 Project ... Properties ... Compile ... Target CPU 中设置为 AnyCPU(默认)。一切正常。

            将目标 CPU 更改为 x64,保存并构建

            关闭并重新打开解决方案。

            您现在收到“无法识别或无法访问成员“XXXX””错误

            将 Target CPU 改回 Any CPU,Save and Build

            窗口现在可以正常显示了。

            【讨论】:

              【解决方案7】:

              我也有同样的例外。我的问题是,该属性的类型在一个程序集中,在我使用 UserControl 的项目中没有引用它。

              【讨论】:

                猜你喜欢
                • 2014-11-21
                • 1970-01-01
                • 1970-01-01
                • 2012-11-09
                • 2014-01-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多