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;
    }
}

Решение все еще необходимо

Первоначальный вопрос, вызвавший этот пост, до сих пор не решен. Если у кого-то есть какие-либо решения, я опробую их, и если предоставленное решение сработает, я отмечу вопрос как решенный. До этого вы пробовали выключить и снова включить?

Спасибо за вашу помощь!

0 ответов

Другие вопросы по тегам