Мое приложение (UWP, C#/xaml) отлично работает в режиме деблокирования, если я его развертываю через Visual Studio или если я загружаю приложение на свой телефон.Приложение UWP падает при загрузке из магазина, но не при загрузке
Но если я загрузить его из магазина и запустить его, он падает со следующим исключением
System.IO.FileLoadException: Не удалось загрузить файл или сборку «System.Threading, Version = 4.0.10.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или одна из ее зависимостей. Определение манифеста размещенной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Кроме того, такое же приложение работает на ПК без сбоев при загрузке/загрузке через VS или даже при загрузке из магазина. Любая помощь будет оценена по достоинству.
Редактировать: Код Snippet > закрытый статический словарь lockDictionary = новый словарь();
private static SemaphoreSlim getLockElement(string fileName)
{
if (lockDictionary.ContainsKey(fileName))
return lockDictionary[fileName];
else
{
SemaphoreSlim objectToReturn = new SemaphoreSlim(1);
lockDictionary.Add(fileName, objectToReturn);
return objectToReturn;
}
}
private async static Task<StorageFile> getFile(string key)
{
try
{
return await storageFolder.GetFileAsync(key);
}
catch (FileNotFoundException ex)
{
return null;
}
}
public static async Task<string> readFileDataIndependentOfUserId(string key)
{
AccountFunctions.logMsg("Awaiting " + key);
await getLockElement(key).WaitAsync();
AccountFunctions.logMsg("Got into " + key);
try
{
StorageFile File = await getFile(key);
if (File == null)
return null;
string text = await FileIO.ReadTextAsync(File);
return text;
}
finally
{
AccountFunctions.logMsg("Released " + key);
getLockElement(key).Release();
}
}
public static async Task saveDataInFileIndependentOfUserId(string key, string data)
{
AccountFunctions.logMsg("Awaiting " + key);
await getLockElement(key).WaitAsync();
AccountFunctions.logMsg("Got into " + key);
try
{
var FileName = key;
var Fileoption = CreationCollisionOption.ReplaceExisting;
var File = await storageFolder.CreateFileAsync(FileName, Fileoption);
await FileIO.WriteTextAsync(File, data);
AccountFunctions.logMsg("Saving : " + key + " : " + data);
}
finally
{
AccountFunctions.logMsg("Released " + key);
getLockElement(key).Release();
}
}
public static async Task removeFileDataIndependentOfUserId(string key)
{
AccountFunctions.logMsg("Awaiting " + key);
await getLockElement(key).WaitAsync();
AccountFunctions.logMsg("Got into " + key);
try
{
StorageFile File = await getFile(key);
if (File == null)
{
getLockElement(key).Release();
return;
}
await File.DeleteAsync();
}
finally
{
AccountFunctions.logMsg("Released " + key);
getLockElement(key).Release();
}
}
Аварийная ситуация возникает в конструкторе моего класса, содержащем эти статические функции. AccountFunctions.logMsg - это функция, которая просто записывает в отладчик, если он подключен.
Сбой на той же машине, что он также работает правильно? –
Ну, этого не должно быть. Ваше приложение будет восстановлено на сервере Store с помощью .NET Native. Который удаляет любую зависимость от сборки .NET. Одна проблема с .NET Native заключается в том, что код отражения очень затруднительный, инструмент сборки не может видеть, что у вас может быть косвенная зависимость. Вот почему у вас есть .NET Native на вашей собственной машине, чтобы вы могли протестировать такой код. Похоже, вы пропустили этот тест. –
@HansPassant Не могли бы вы указать мне направление написания? О каком тесте вы говорите? Также я не использую отражение в своем коде. –