Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中引用的.NET标准类库-设计时XAML中的签名错误_C#_Wpf_Xaml_.net Standard - Fatal编程技术网

C# WPF中引用的.NET标准类库-设计时XAML中的签名错误

C# WPF中引用的.NET标准类库-设计时XAML中的签名错误,c#,wpf,xaml,.net-standard,C#,Wpf,Xaml,.net Standard,我制作了一个netstandard类库。我的目标是NetStandard1.6。我的csproj是这样的: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup Label="Globals"> <SccProjectName>SAK</SccProjectName> <SccProvider>SAK</SccProvider> <SccAuxP

我制作了一个netstandard类库。我的目标是NetStandard1.6。我的csproj是这样的:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup Label="Globals">
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Runtime" Version="4.3.0" />
    <PackageReference Include="System.Runtime.Serialization.Primitives" Version="4.3.0" />
    <PackageReference Include="System.Runtime.Serialization.Xml" Version="4.3.0" />
  </ItemGroup>
</Project>

萨克
萨克
萨克
萨克
netstandard1.6
我有一个WPF项目,在其中我引用了这个dll。我可以在c#中使用netstandard dll的类。我也可以在xaml中使用它们。我甚至为他们获得了智慧但是xaml设计器说,我的xaml无效。我可以编译解决方案,我可以运行应用程序。运行时一切正常。但设计师无法使用它

Person类看起来像:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Text;

namespace DS.Publications.Common
{
    [DataContract(Namespace = Constants.NamespaceConstants.DataContractNamespace)]
    public class Person : INotifyPropertyChanged
    {
        private string _Title = string.Empty;

        [DataMember]
        public string Title { get { return _Title; } set { Set(ref _Title, value); } }



        private string _ForeName;

        [DataMember]
        public string ForeName { get { return _ForeName; } set { Set(ref _ForeName, value); } }

        private string _LastName;
        [DataMember]
        public string LastName { get { return _LastName; } set { Set(ref _LastName, value); } }



        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        private bool Set<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
        {

            if (field == null || !field.Equals(value))
            {
                field = value;
                this.OnPropertyChanged(propertyName);
                return true;
            }
            return false;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用System.Runtime.CompilerServices;
使用System.Runtime.Serialization;
使用系统文本;
命名空间DS.Publications.Common
{
[DataContract(命名空间=常量。命名空间常量。DataContractNamespace)]
公共类人员:INotifyPropertyChanged
{
私有字符串_Title=string.Empty;
[数据成员]
公共字符串标题{get{return{u Title;}set{set(ref{u Title,value);}}
私有字符串_名称;
[数据成员]
公共字符串名{get{return}u ForeName;}set{set(ref{u ForeName,value);}
私有字符串_LastName;
[数据成员]
公共字符串LastName{get{return{u LastName;}set{set(ref{u LastName,value);}
公共事件属性更改事件处理程序属性更改;
私有void OnPropertyChanged(字符串propertyName)
{
this.PropertyChanged?.Invoke(this,newpropertychangedeventargs(propertyName));
}
私有布尔集合(参考T字段,T值,[CallerMemberName]字符串propertyName=null)
{
if(field==null | |!field.Equals(value))
{
字段=值;
此.OnPropertyChanged(propertyName);
返回true;
}
返回false;
}
}
}

你知道解决方法吗,或者你有什么想法,我怎样才能纠正它?

我也遇到了类似的问题;我在一个.NET标准项目中有一个类,并试图使用一个可观察的集合在列表框中显示它。事实证明,XAML不喜欢数据契约。当我从.NET标准类中删除
[DataContract]
属性后,它就开始工作了。我已经就这种行为向微软提交了一份报告。如果我的假设是正确的,那么只要删除
[DataContract]
属性,错误就会消失

至于解决办法。您可以删除DataContract(它不会像您需要的那样工作,否则您将不会使用它,我猜…),或者为每个类创建一个代理对象,它镜像功能并将函数调用重定向到原始对象的底层副本。我没有考虑这是否足以阻止XAML触发数据契约(如果是这样的话)

它可能在编译模式下工作,因为它仅定义为资源。只要它不是主动显示的,它就可能工作。也许设计师试图显示资源

这可能与另一个bug(和)有关,其中来自.NET标准的依赖项没有导入/转换到其他项目。此错误报告描述了当从引用的DLL访问功能时,东西会崩溃。基本上,您有一个使用第三方库X的.NET标准库和一个使用.NET标准库Y的.NET Framework项目Z。只要您在Y中调用一个方法,该方法反过来调用X,您就完蛋了。您需要手动将Y中的所有引用导入到项目Z中

关于这两者之间的关系。数据契约是.NET标准独有的功能,旨在取代可序列化的
功能。但它们似乎有更多的功能,XAML前端会以某种方式触发这些功能。由于.NETFramework无法使用数据契约,因此一切都会崩溃


如果您设法找到了解决方案,请告诉我们,因为此错误需要“适当”的解决方法…

我还没有找到解决此问题的方法。。。我已经将netstandard库的目标框架设置回netstandard1.3。当目标设定为1.3时,一切正常。我希望,下一次VS更新将提供一个修复程序

PS.当我将目标设置为netstandard1.3时,我遇到了一个问题,找到了旧的netstandard1.6二进制文件,直到我真正清理了解决方案,如下所示:

您的类是如何定义的?我添加了Person类源谢谢您的回答。我从类中删除了DataContract和DataMember属性,但没有任何帮助。这样做之后是否重新编译了库?