Nano Hash - криптовалюты, майнинг, программирование

Как импортировать проект msbuildcommunitytasks из другого проекта msbuild с относительным путем к файлу?

Пожалуйста, не торопитесь. Я новичок в msbuild и msbuildtasks!

Как я могу установить свойство, представляющее относительный путь к целевому файлу, который я хочу импортировать? Мне нужны относительные ссылки, чтобы он работал на всех машинах разработчиков. Но цель для импорта пытается использовать относительный путь к файлу внутри, что не сработает, так как он переоценивается относительно импортированной цели!

По сути, я пытаюсь обойти документированное поведение импортированных проектов:

Все относительные пути в импортированных проектах интерпретируются относительно каталога импортированного проекта. Следовательно, если файл проекта импортируется в несколько файлов проекта в разных местах, относительные пути в импортированном файле проекта будут интерпретироваться по-разному для каждого импортированного проекта.


  • Есть ли конкретная причина, по которой вы не помещаете библиотеку MSBuildCommunityTask рядом с MSBuild в% PROGDIR% \ MSBuild \ MSBuildCommunityTasks \? Тогда путь может быть относительно MSBuild (например, предложенный специалистами MSBCT): ‹Import Project = $ (MSBuildExtensionsPath) \ MSBuildCommunityTasks \ MSBuild.Community.Tasks.Targets /› 22.01.2010
  • Да, потому что тогда мне пришлось бы установить его на все машины для разработки и сборки, а затем управлять их обновлением. 22.01.2010

Ответы:


1

Аналогичный вопрос был на Можно ли использовать MSBuild Extension Pack без установки?. Этот вопрос заключался в том, как сделать то же самое с MSBuild Extension Pack, оба из которых похожи в этом аспекте. . Для пакета расширений вы должны объявить свойство ExtensionTasksPath, а для задач сообщества вы должны объявить аналогичное свойство с именем MSBuildCommunityTasksLib. Итак, в вашем случае это должно выглядеть так:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <MSBuildCommunityTasksLib Condition="'$(MSBuildCommunityTasksLib)' == ''">E:\Data\Development\My Code\Community\MSBuild\CommunityTasks\</MSBuildCommunityTasksLib>
  </PropertyGroup>

  <Import Project="$(MSBuildCommunityTasksLib)MSBuild.Community.Tasks.Targets"/>

  <Target Name="Demo">
    <!-- Use the tasks here -->
  </Target>

</Project>
22.01.2010
  • Но это же абсолютные пути к файлам нет? Или я неправильно понял? Мне нужно указать на него относительный путь к файлу или, по крайней мере, чтобы иметь возможность преобразовать относительный путь к файлу во время выполнения. 22.01.2010
  • Большинству инструментов для правильной работы требуется полный путь. Я установил пару переменных в .proj, которые я использую во всех своих «рабочих» файлах .proj. Эти переменные содержат фиксированную часть путей для различных вещей. В группе свойств: ‹SolutionRoot› $ (WorkingDrive) $ (SolutionFolder) \ $ (Branch) \ NET \ BuildOut $ (Configuration) ‹/SolutionRoot› $ (SolutionFolder) создается из других вещей, таких как номер сборки Major-Minor и т. д. (относится к нашей настройке). Затем другие файлы .proj импортируют его: ‹Import Project = AlliantBuildProperties.proj /› 22.01.2010
  • Вы должны иметь возможность построить полный путь из относительного пути. Вы можете использовать такие свойства, как MSBuildProjectDirectory. 22.01.2010
  • ‹MSBuildCommunityTasksLibCondition = должно быть‹ MSBuildCommunityTasksLib Condition = 12.07.2012
  • Объявить MSBuildCommunityTasksLib может быть недостаточно, см. Ответ @Vipresh 12.07.2012

  • 2

    Хорошо, я нашел ответ. По сути, вы должны установить свойство MSBuildCommunityTasksPath как относительный путь к исходному содержащему каталогу.

    Например, учитывая такую ​​структуру папок:

    Root---project---Build---{My msbuild project}
               |
               |-Tools---MSBuildCommunityTasks---{Binaries and Targets}
    
    Where :
    {My msbuild project} is in Root\Project\Build\
    {MSbuildCommunityTasks} is in Root\Project\Tools\MsBuildCommunityTasks

    Чтобы целевой проект ссылался на свои двоичные файлы через свойство MSBuildCommunityTasksPath, он найдет файл задач следующим образом:

    <PropertyGroup>
        <MSBuildCommunityTasksPath>..\MSBuildCommunityTasks\</MSBuildCommunityTasksPath> <!--Relative path back to yourself-->
    </PropertyGroup>
    

    Затем вы можете импортировать целевой файл с другой относительной ссылкой на файл:

      <Import Project="..\..\Tools\MSBuildCommunityTasks\MsBuild.Community.Tasks.Targets"/>
    
    22.01.2010

    3

    @ Саид Ибрагим Хашими

    Разговор о MSBuild4 Простого объявления MSBuildCommunityTasksLib недостаточно, потому что, если вы проверите файл MSBuild.Community.Tasks.Targets, свойства объявляются следующим образом

    <PropertyGroup>
        <MSBuildCommunityTasksPath Condition="'$(MSBuildCommunityTasksPath)' == ''">$(MSBuildExtensionsPath)\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
        <MSBuildCommunityTasksLib>$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll</MSBuildCommunityTasksLib>
      </PropertyGroup>
    

    Таким образом, если U переопределяет только MSBuildCommunityTasksLib, он снова будет переопределен в файле MSBuild.Community.Tasks.Targets, поскольку он не является условным. Таким образом, вы также ДОЛЖНЫ ПРЕРЫВАТЬ MSBuildCommunityTasksPath, чтобы его свойство НЕ УСТАНАВЛИВАЕТСЯ ИЗ MSBuildExtensions path, а из настраиваемого пути url . Поправьте меня, если я ошибаюсь

    11.10.2011

    4

    Кажется, это один ответ:

    http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/feb782e3-72ae-4476-9011-617796f217b6

    Но это (если я правильно понимаю) кажется нелепым решением. Чтобы пути работали, мне нужно изменить ссылки на импортированные проекты? Что произойдет, если я захочу сослаться на импортированный проект из третьего проекта в другой папке?!?

    22.01.2010

    5

    Я новичок в msbuild, если честно, но я только что решил свою проблему с этим. Я превращал одну из целей в отдельный проект, и она не находила пути для путей сообщества msbuild. Если вы посмотрите на свой оригинальный проект, вы можете найти что-то вроде этого

    <PropertyGroup>
        <ExtensionTasksPath>./</ExtensionTasksPath>
        <MSBuildCommunityTasksPath>./</MSBuildCommunityTasksPath>
    </PropertyGroup>
    
    <Import Project="MSBuildExtensionPack\MSBuild.ExtensionPack.tasks"/>
    <Import Project="MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
    

    Скопируйте этот код в свой новый проект, и он должен работать.

    17.01.2012
  • Это не может работать. Ваши переменные даже не экранируются с помощью $ (). Пример: ‹Импортировать проект = $ (MSBuildCommunityTasksPath) \ MSBuild.Community.Tasks.Targets /› 19.12.2012

  • 6

    Я просто хотел добавить, поскольку я не могу комментировать (rep), что для создания пути к вашему конкретному проекту вы можете использовать $ (SolutionDir) в своей группе свойств следующим образом:

    $ (SolutionDir) \ Мой код \ Сообщество \ MSBuild \ CommunityTasks \

    Таким образом, он не привязан к конкретному диску и может зависеть от местоположения проекта относительно структуры каталогов ваших решений.

    Также спасибо за ответ выше, он помог мне в моем проекте с добавлением выше.

    16.07.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..