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)
我错过了什么?有人可以帮忙吗?
您是否引用 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| 归档时间: |
|
| 查看次数: |
1856 次 |
| 最近记录: |