Member 13187373 Ответов: 0

Удаление префикса пространства имен “asmv2” атрибута вызывает исключение system.nullreferenceexception


Всем Привет,

У меня есть проблема при удалении пространства имен prfix "asmv2". Это вызывает исключение нулевой ссылки.

Пожалуйста смотрите ниже фрагмент кода:

<pre>/// <summary>
  /// Remove lines from the manifest that contain filenames that do not
  /// exist in the addin bin folder
  /// </summary>
  /// <param name="manifest">Manifest file to edit</param>
  private static void SanitizeManifestToMatchBin(string manifest, string addInBinFolder)
  {
     // load manifest
     XDocument xDoc = XDocument.Load(manifest);
     xDoc.Root.Attribute(XNamespace.Xmlns + "asmv2").Remove();
     XNamespace ns = "urn:schemas-microsoft-com:asm.v2";

     // remove any files from dependentAssembly/codebase that do not exist in the bin folder
     xDoc.Descendants(ns + "dependentAssembly")
        .Where(x => (string)x.Attribute("dependencyType") == "install" && File.Exists(addInBinFolder + "\\" + (string)x.Attribute("codebase").Value) == false)
        .Select(x => x.Parent)
        .Remove();

     //xDoc.Descendants(ns + "file")
     //   .Where(x => File.Exists(addInBinFolder + "\\" + (string)x.Attribute("name").Value) == false)
     //   .Select(x => x)
     //   .Remove();

     //xDoc.Descendants(ns + "file").Remove();
     xDoc.Save(manifest);
  }


На приведенном выше фрагменте кода,
xDoc.Root.Attribute(XNamespace.Xmlns + "asmv2").Remove(); //is throwing null reference exception.


Ниже приведен мой xml-манифест:

<pre><asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" 
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns="urn:schemas-microsoft-com:asm.v2" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" 
xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" 
xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" 
xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">


Что я уже пробовал:

В приведенном выше xml-манифесте я обнаружил, что "asmv2" недоступен, и я пытаюсь удалить эту запись.Я попытался проверить, почему этой записи там нет, но безуспешно.

Пожалуйста, помогите мне решить эту проблему.

Спасибо.

Richard MacCutchan

Вы не можете удалить то, чего не существует.

Member 13187373

Почему этот атрибут asmv2 отсутствует в файле xml-манифеста при создании файла xml-манифеста? Может быть, это зависит от установки какого-то пакета на машину?

Richard MacCutchan

Я понятия не имею, но содержание манифеста зависит от структуры вашего приложения и от того, какие функции оно использует. Вы не должны делать предположений о том, что он содержит.

0 Ответов