Как ссылаться на пакет NuGet в .csproj - PullRequest
1 голос
/ 24 апреля 2019

Мне нужно использовать элемент <attrib> [Docs] в файле .csproj моего консольного приложения .NET Framework.

Он вложен в элемент <Target Name="BeforeBuild">, потому что мне нужночтобы отредактировать атрибуты нескольких файлов перед сборкой, вот полный код из .csproj:

<Target Name="BeforeBuild">
    <Attrib Files="App.config" ReadOnly="false" />
    <Attrib Files="Ocelot.json" ReadOnly="false" />
    <Attrib Files="OcelotLogging.json" ReadOnly="false" />
</Target>

Когда код написан так, редактор выдает мне эту ошибку: Task 'Attrib' is not defined.

Что я пробовал?

  • Я бы использовал элемент <UsingTask>, где параметр - это путь к пакету NAnt.Core NuGet.Весь код выглядит так:

    <UsingTask TaskName="Attrib" AssemblyFile="C:\Users\UserName\.nuget\packages\nant.core\0.92.0\lib\net40\NAnt.Core.dll" /> <Target Name="BeforeBuild"> <Attrib Files="App.config" ReadOnly="false" /> <Attrib Files="Ocelot.json" ReadOnly="false" /> <Attrib Files="OcelotLogging.json" ReadOnly="false" /> </Target> Но ошибка не исчезает.Когда я все равно пытаюсь скомпилировать приложение, я получаю следующую ошибку: The "Attrib" task could not be loaded from the assembly C:\Users\UserName\.nuget\packages\nant.core\0.92.0\lib\net40\NAnt.Core.dll. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.

1 Ответ

1 голос
/ 24 апреля 2019

Я думаю, что вы смешиваете задачи NAnt и MSBuild.

Задачи NAnt записываются в файл .build и вызываются путем передачи этого файла в исполняемый файл NAnt, как объяснено здесь . Вы загружаете их с loadtasks.

Задачи MSBuild однако можно использовать как угодно в файле .csproj. Вы используете usingtask для работы с ними.

Итак, в вашем случае вы можете использовать пакет msbuildtasks , в котором также есть задача attrib.

Установить пакет:

Последнюю сборку можно скачать из раздела релизов. https://github.com/loresoft/msbuildtasks/releases

Библиотека задач сообщества MSBuild также доступна на nuget.org через имя пакета> MSBuildTasks.

Чтобы установить MSBuildTasks, выполните следующую команду в консоли диспетчера пакетов

PM> Install-Package MSBuildTasks

При установке также убедитесь, что вы можете использовать задачи в вашем csproj без необходимости использовать usingtask, поэтому:

<Target Name="BeforeBuild">
    <Attrib Files="App.config" ReadOnly="false" />
    <Attrib Files="Ocelot.json" ReadOnly="false" />
    <Attrib Files="OcelotLogging.json" ReadOnly="false" />
</Target>

Обратите внимание, что это другой способ сделать это с MSBuild, этот - только самый близкий к тому, что вы написали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...