Ни один из них не является более «правильным», чем другой, оба будут работать для вашего примера. Ничто не нарушает никаких правил.
Я сказал, что согласен с W3Schools на этом, поскольку эти данные должны проходить внутри дочерних элементов, а не из атрибутов. Особенно такие вещи, как IP-адреса, просто FEEL, как данные, которые должны быть дочерним элементом, а не атрибутом. Атрибуты, которые я обычно использую для метаданных, таких как автоматически сгенерированные идентификаторы.
Это особенно верно, если позже вы хотите учитывать расширение - например, что, если вы хотите связать несколько IP-адресов? С дочерними элементами вы можете просто добавить еще один элемент, но с атрибутами вы должны придумать новое имя атрибута для каждого добавления (ip1, ip2, ip3 ...).
Измените «Verbousite Project MSBuild Project Project Build» на «подробное» или выше. Для этого выполните следующие действия:
На странице «Инструменты» / «Параметры», которая появляется, установите Verbity Project MSBuild Project Project Project Уровень Уровень Уровень Уровень Уровень в зависимости от соответствующей настройки в зависимости от вашей версии:
Проверьте сообщения MSBUILD. ResolveAssemblerference
задача, которая является задачей, из которой происходит MSB3247, должна помочь вам отладить эту конкретную проблему.
Мой конкретный случай был неверной ссылкой на SQLSERVERCE. См. ниже. У меня были два проекта, ссылающиеся на две разные версии SQLServerce. Я пошел в проект со старой версией, удалил ссылку, затем добавил правильную ссылку.
Target ResolveAssemblyReferences:
Consider app.config remapping of assembly "System.Data.SqlServerCe, ..."
from Version "3.5.1.0" [H:\...\Debug\System.Data.SqlServerCe.dll]
to Version "9.0.242.0" [C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\System.Data.SqlServerCe.dll]
to solve conflict and get rid of warning.
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets :
warning MSB3247: Found conflicts between different versions of the same dependent assembly.
Вам не нужно открывать каждую сборку, чтобы определить версии ссылочных сборок.
Иногда AutoGenerateBindingRedirects
не достаточно (даже с GenerateBindingRedirectsOutputType
). Поиск весь эти There was a conflict
записи и фиксация их вручную один за другим могут быть утомительными, таким образом, я записал маленькую часть кода, который анализирует вывод журнала и генерирует их для Вас (выводит к stdout
):
// Paste all "there was a conflict" lines from the msbuild diagnostics log to the file below
const string conflictFile = @"C:\AssemblyConflicts.txt";
var sb = new StringBuilder();
var conflictLines = await File.ReadAllLinesAsync(conflictFile);
foreach (var line in conflictLines.Where(l => !String.IsNullOrWhiteSpace(l)))
{
Console.WriteLine("Processing line: {0}", line);
var lineComponents = line.Split('"');
if (lineComponents.Length < 2)
throw new FormatException("Unexpected conflict line component count");
var assemblySegment = lineComponents[1];
Console.WriteLine("Processing assembly segment: {0}", assemblySegment);
var assemblyComponents = assemblySegment
.Split(",")
.Select(kv => kv.Trim())
.Select(kv => kv.Split("=")
.Last())
.ToArray();
if (assemblyComponents.Length != 4)
throw new FormatException("Unexpected conflict segment component count");
var assembly = assemblyComponents[0];
var version = assemblyComponents[1];
var culture = assemblyComponents[2];
var publicKeyToken = assemblyComponents[3];
Console.WriteLine("Generating assebmly redirect for Assembly={0}, Version={1}, Culture={2}, PublicKeyToken={3}", assembly, version, culture, publicKeyToken);
sb.AppendLine($"<dependentAssembly><assemblyIdentity name=\"{assembly}\" publicKeyToken=\"{publicKeyToken}\" culture=\"{culture}\" /><bindingRedirect oldVersion=\"0.0.0.0-{version}\" newVersion=\"{version}\" /></dependentAssembly>");
}
Console.WriteLine("Generated assembly redirects:");
Console.WriteLine(sb);
Подсказка: используйте Двоичный файл MSBuild и Структурированное Средство просмотра журнала и только генерируйте переадресации связывания для конфликтов в проекте, который испускает предупреждение (то есть, только мимо тех there was a conflict
строки к входному текстовому файлу для кода выше [AssemblyConflicts.txt
]).
Я обнаружил, что (по крайней мере, в Visual Studio 2010) вам необходимо установить уровень детализации вывода как минимум на «Подробный», чтобы можно было обнаружить проблему.
Возможно, моя проблема заключалась в ссылке, которая раньше была ссылкой на GAC, но после переустановки моей машины этого больше не было.