Как скопировать файлы, связанные с контентом, в каталог проекта, не вызывая дубликатов - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь сослаться на некоторые javascript файлы в моем проекте, которые приходят из пакета nuget. Поэтому я добавил эти файлы в качестве ссылки на контентную ссылку.

<Content Include="$(NuGetPath_jQuery)\Content\Scripts\**\*.*">
  <Link>Scripts\%(RecursiveDir)%(FileName)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

Но для отладки веб-проекта F5 мне нужно, чтобы эти файлы были частью структуры папок проекта. Я также использую эти файлы в ScriptBundle, поэтому для локальной отладки должна присутствовать физическая структура каталогов. В результате я закончил тем, что добавил следующую сборку ttask, которая копирует файлы, связанные с контентом, согласно блогу Мэтта Пердека , на который ссылаются во многих других потоках вокруг ссылок на контент, как показано ниже.

<Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
    <Copy SourceFiles="%(Content.Identity)" 
          DestinationFiles="%(Content.Link)" 
          SkipUnchangedFiles='true' 
          OverwriteReadOnlyFiles='true' 
          Condition="'%(Content.Link)' != ''" />
</Target>

Теперь VS доволен отладкой F5. Но жалуется на загрузку проекта в следующий раз из-за невозможности добавить ссылки на контент, потому что файлы уже существуют. Которые были скопированы в предыдущей сборке. Я пропускаю какой-то секретный соус, чтобы сказать VS, чтобы игнорировать эти предупреждения? Я заметил, что msbuild не выдает такого предупреждения. Это только VS, который жалуется. Я вижу предупреждение, как показано ниже:

Предупреждение Файл 'C: \ Users \ pkorhale.nuget \ packages \ jquery \ 3.3.1 \ Content \ Scripts \ jquery -3.3.1. slim.min. js 'невозможно добавить в проект. Невозможно добавить ссылку на файл jquery -3.3.1.slim.min. js. В этой папке уже есть файл с таким же именем.

1 Ответ

0 голосов
/ 20 марта 2020

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

<Content Include="$(NuGetPath_jQuery)\Content\Scripts\**\*.*">
  <Link>Scripts\%(RecursiveDir)%(FileName)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  <Visible>false</Visible>
</Content>
...