c# - 带有 xmlSerializer 的 UWP - System.InvalidOperationException : Unable to generate a temporary class (result=1) compile error

标签 c# .net xml-serialization uwp .net-native

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

该应用程序正在完美地编译、构建和运行,直到不知何故(没有对代码进行任何更改)发布构建开始给我这个错误:System.InvalidOperationException:无法生成一个临时类 (result=1)

如果我在调试时构建或运行应用程序,它可以完美运行,但在发布时(.NET native 工具链处于事件状态)我收到错误。

我已将 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;
    }

我错过了什么?谁能帮忙?

最佳答案

您是否偶然引用了 XML 序列化文件被“添加为链接”的项目? (在我的案例中是什么导致了上述错误)在那种情况下,这里是......

...解决方案:

显然,您仍然可以使用代码共享的“添加为链接”方式,但是为了启用“使用 .NET Native 工具链编译”而没有任何那些不明显的无关错误,“添加为链接” ” 文件需要移动到调用方项目

关于c# - 带有 xmlSerializer 的 UWP - System.InvalidOperationException : Unable to generate a temporary class (result=1) compile error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34813690/

相关文章:

c# - AjaxToolkit ModalPopupExtender 不在顶部

.net - 哪个更适合 ASP.Net : WMI or ADSI or Managed API? 中的 IIS 管理,有什么区别?

c# - 为什么序列化 double[] 在 WinCE 中不起作用?

c# - 带有 api key 身份验证的 Swagger 客户端生成

c# - C#查找类的依赖关系

c# - C#如何计算没有括号的AND OR表达式

.net - 如何避免引发 AddressAlreadyInUseException?

xml - XML 属性中哪些字符无效(除非已编码)?

c# - XmlSerializer.Deserialize() 未正确反序列化 List<T>

c# - Html Agility Pack 按类获取所有元素