UWP with xmlSerializer - System.InvalidOperationException:无法生成临时类(result = 1)编译错误

Dan*_*iel 5 .net c# xml-serialization .net-native uwp

在我的通用Windows应用程序中,我存储用户数据通过XmlSerializer将其对象转换为xml文件.

应用程序正在编译,构建和运行完美,直到某种方式(代码没有任何更改),发布版本开始给我这个错误:System.InvalidOperationException:无法生成临时类(result = 1).

如果我在调试时构建或运行应用程序,它可以完美地运行但是在发布时(.NET本机工具链处于活动状态)我得到了错误.

我已经将C:\ Windows\Temp文件夹的权限授予了所有人.即使我的母亲也可以访问它,但错误仍然存​​在.

如果它确实是XmlSerializer上的读/写问题,我想知道是否有任何方法可以更改UWP项目上的序列化程序临时文件夹.

这是我用来序列化对象的代码:

    public static async Task<T> ReadObjectFromXmlFileAsync<T>(string filename)
    {
        // this reads XML content from a file ("filename") and returns an object  from the XML
        T objectFromXml = default(T);
        var serializer = new XmlSerializer(typeof(T));
        StorageFolder folder = ApplicationData.Current.LocalFolder;
        StorageFile file = await folder.GetFileAsync(filename).AsTask().ConfigureAwait(false);
        Stream stream = await file.OpenStreamForReadAsync().ConfigureAwait(false);
        objectFromXml = (T)serializer.Deserialize(stream);
        stream.Dispose();
        return objectFromXml;
    }

    public static async Task SaveObjectToXml<T>(T objectToSave, string filename)
    {
        // stores an object in XML format in file called 'filename'
        var serializer = new XmlSerializer(typeof(T));
        StorageFolder folder = ApplicationData.Current.LocalFolder;
        StorageFile file = await folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting).AsTask().ConfigureAwait(false);
        Stream stream = await file.OpenStreamForWriteAsync().ConfigureAwait(false);

        using (stream)
        {
            serializer.Serialize(stream, objectToSave);
        }
    } 

    //This uses a subfolder
    public static async Task<T> ReadObjectFromXmlFileAsync<T>(string filename)
    {
        // this reads XML content from a file ("filename") and returns an object  from the XML
        T objectFromXml = default(T);
        var serializer = new XmlSerializer(typeof(T));
        StorageFolder folder = ApplicationData.Current.LocalFolder;
        StorageFolder subFolder = await folder.GetFolderAsync("Notes").AsTask().ConfigureAwait(false);
        StorageFile file = await subFolder.GetFileAsync(filename).AsTask().ConfigureAwait(false); 
        Stream stream = await file.OpenStreamForReadAsync().ConfigureAwait(false);
        objectFromXml = (T)serializer.Deserialize(stream);
        stream.Dispose();
        return objectFromXml;
    }
Run Code Online (Sandbox Code Playgroud)

我错过了什么?有人可以帮忙吗?

Ale*_*ida 0

您是否引用 XML 序列化文件 \xe2\x80\x9cAdded 作为 Link\xe2\x80\x9d 的项目?(这就是在我的情况下导致上述错误的原因)在这种情况下,这里是......

\n\n

...解决方案:

\n\n

显然,你仍然可以使用 \xe2\x80\x9cAdded as Link\xe2\x80\x9d 的方式进行代码共享,但是为了启用 \xe2\x80\x9c 使用 .NET Native 工具链编译\xe2\x80\x9d 而无需任何这些模糊的不相关错误,\xe2\x80\x9cAdded as Link\xe2\x80\x9d 文件需要移动到调用者项目

\n