EntityDeploySplit Ошибка
Я работал над менеджером сборки для моей команды. У нас есть сотни проектов, которые являются частью набора инструментов, которые скомпилированы через пакетный файл; Затем файлы.dll перемещаются в центральное расположение вместе с.exe, который будет их использовать. Никому из нас не нравится пакетный файл, так как с ним может быть сложно работать, когда приходится вносить изменения; особенно в больших масштабах.
Я реализовал приведенный ниже код для создания наших проектов. Единственная проблема, которая у меня осталась в настоящее время, заключается в том, что при создании решения выдается ошибка. У меня есть решение с двумя проектами.
WriteLine("Building solution.");
ProjectCollection projects = new ProjectCollection();
Dictionary<string, string> globalProperties = new Dictionary<string, string>();
globalProperties.Add("OutputPath", "..\\TestDirectory");
List<ILogger> loggers = new List<ILogger>();
loggers.Add(new ConsoleLogger());
try {
BuildParameters parameters = new BuildParameters(projects);
parameters.Loggers = loggers;
BuildRequestData request = new BuildRequestData($"C:\\Testing\\TestSolution\\TestSolution.sln",
globalProperties, null, new string[] { "Build" }, null);
BuildResult result = BuildManager.DefaultBuildManager.Build(parameters, request);
} catch (Exception e) {
WriteLine($"A fatal error occurred: {e.Message}");
ReadKey();
return;
}
WriteLine("Build complete.");
ReadKey();
Результатом является сообщение об ошибке (записывается через регистратор, а не в блоке catch):
DIR = C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319
DIR \ Microsoft.Data.Entity.targets (40,5): ошибка MSB4127: не удалось создать задачу "EntityDeploySplit" из сборки "DIR\Microsoft.Data.Entity.Build.Tasks.dll".
Убедитесь, что сборка задачи была построена с использованием той же версии сборки Microsoft.Build.Framework, что и на вашем компьютере, и что ваше хост-приложение не пропускает перенаправление привязки для Microsoft.Build.Framework.
Невозможно привести объект типа "Microsoft.Data.Entity.Build.Tasks.EntityDeploy" к типу "Microsoft.Build.Framework.ITask".
Сборка завершается с двумя ошибками, обе из которых являются этой ошибкой. Я пытался заглянуть в этот пост, который сказал, что проблема связана с .TARGETS
файл. После изучения моего .TARGETS
файл, я обнаружил, что никаких изменений не требовалось.
<UsingTask TaskName="EntityDeploySplit" AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" />
<UsingTask TaskName="EntityDeploy" AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" />
<UsingTask TaskName="EntityDeploySetLogicalNames" AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" />
<UsingTask TaskName="EntityClean" AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" />
Когда я искал ответы, я наткнулся на этот пост, в котором говорится, что Microsoft.Data.Entity.Build.Tasks.dll
подать в C:\Program Files (x86)\MSBuild\12.0\Bin
, Я не могу сделать это в нашей рабочей среде. Однако этот конкретный файл не находится в целевом каталоге, как предполагает пост.
Я даже пытался изменить версию набора инструментов в файлах проекта, но безуспешно. Оба проекта уже настроены на 14.0
не 4.0
как я и ожидал.
Мне не повезло, что я решил проблему, и, хотя это низкий приоритет, это сводит меня с ума, что что-то настолько тривиальное вызывает полную остановку в процессе. Если у кого-то есть какие-либо идеи или идеи, пожалуйста, дайте мне знать.
Кроме того, все решение создается без проблем с помощью Visual Studio.
НОТА
Если вы считаете, что я не предоставил достаточно информации, чтобы прояснить проблему, пожалуйста, дайте мне знать, чтобы я мог обновить вопрос для будущих читателей. Также для администраторов; Я не был уверен, какие теги будут лучше для этого вопроса. Если вы считаете, что теги не точны или нужно больше тегов, не стесняйтесь добавлять их или дайте мне знать, чтобы я мог добавить их.
Мой обходной путь
В итоге мне пришлось пойти другим путем, чтобы построить свои проекты. Я создал новый проект для разработчиков тестов, чтобы иметь возможность работать с ним. Я добавил ссылки на Microsoft.Build.Evaluation
а также Microsoft.Build.Logging
(версии 14.0). Я тогда воспользовался и отвечу из этого поста. Это был гораздо более упрощенный подход, чем я предполагал, и это оставляет движение файлов, которое будет обрабатываться либо на OutputPath
в свойствах для каждого проекта, или с помощью Directory
, Использованный ответ сводился к следующей реализации:
using System;
using static System.Console;
using Microsoft.Build.Evaluation;
using Microsoft.Build.Logging;
public static void BuildProject(string dir, string projectName) {
WriteLine($"Building project '{projectName}'.");
try {
Project project = new Project($"{dir}\\{projectName}.csproj", null, "14.0");
project.Build(new ConsoleLogger());
} catch (Exception e) {
WriteLine($"A fatal error occurred: {e.Message}");
return;
}
}
Решение все еще необходимо
Первоначальный вопрос, вызвавший этот пост, до сих пор не решен. Если у кого-то есть какие-либо решения, я опробую их, и если предоставленное решение сработает, я отмечу вопрос как решенный. До этого вы пробовали выключить и снова включить?
Спасибо за вашу помощь!