Как заставить копировать в выходной каталог поверх всех? - PullRequest
1 голос
/ 08 октября 2019

У меня есть этот фрагмент кода в моем .csproj файле, чтобы принудительно скопировать определенную версию System.Runtime.CompilerServices.Unsafe.dll в папку вывода после сборки:

  <Target Name="ForcingUnsafeSpecificVersion" AfterTargets="AfterBuild">
    <Copy SourceFiles="Path\System.Runtime.CompilerServices.Unsafe.dll" DestinationFolder="$(OutDir)" />
  </Target>

Но это не работает. Он не переопределяет версию выходного каталога, или, возможно, что-то еще переопределяет его.

Я также пытался:

  <ItemGroup>
    <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview.18571.3">
      <NoWarn>NU1605</NoWarn>
    </PackageReference>
  </ItemGroup>

Все еще безуспешно. Я также попробовал:

  <ItemGroup>
    <None Include="Path\System.Runtime.CompilerServices.Unsafe.dll">
      <Link>System.Runtime.CompilerServices.Unsafe.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

Не сработало. Обратите внимание, что эта строка работает

  <ItemGroup>
    <None Include="Path\System.Runtime.CompilerServices.Unsafe.dll">
      <Link>System.Runtime.CompilerServices.Unsafe2.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

Если я добавлю число 2 в конце имени выходного файла, то это работает. Но кажется, что все эти конфигурации сборки терпят неудачу и переопределяются чем-то другим.

Как заставить этот файл скопировать в выходной каталог?

1 Ответ

1 голос
/ 09 октября 2019

1. Кажется, вы просто пытаетесь скопировать что-то в OutDir после сборки.

  <Target Name="ForcingUnsafeSpecificVersion" AfterTargets="AfterBuild">
    <Copy SourceFiles="Path\System.Runtime.CompilerServices.Unsafe.dll" DestinationFolder="$(OutDir)" />
  </Target>

Эта задача всегда должна работать, если вам просто нужно скопировать один файл, если нет, возможно, это может бытьчто-то о доступе. Вы можете добавить в команду опции OverwriteReadOnlyFiles, чтобы проверить, помогает ли это:

  <Target Name="ForcingUnsafeSpecificVersion" AfterTargets="AfterBuild">
    <Copy SourceFiles="Path\System.Runtime.CompilerServices.Unsafe.dll" DestinationFolder="$(OutDir)" OverwriteReadOnlyFiles="true"/>
  </Target>

2.Если это не помогло, измените msbuild verbosity на Detailed и проверьтеподробный журнал в окне вывода:

enter image description here

По этому журналу можно выяснить, что произошло в этом процессе.

3. Также, вы можете попробовать, если вы можете скопировать одну сборку в целевой путь с помощью copy or xcopy command in cmd.exe, если он работает, то вы также можете рассмотреть возможность использования Exec Task , чтобы сделать то, что вы хотите.

4Если все вышеперечисленное не помогает, пожалуйста, поделитесь более подробной информацией о типе вашего проекта и подробностях о содержании rpoject (пакеты nuget ...). Я думаю, если есть какое-то недопонимание относительно $(OutDir), возможно, вы пытаетесь скопировать его в папку publish/deploy вместо обычной выходной папки (bin \ Debug \ netcoreappx.x ...).

...