Скопируйте файлы DLL в каталог bin после публикации одним щелчком в VS2010 - PullRequest
2 голосов
/ 13 марта 2011

У меня есть веб-приложение в VS2010, в котором есть несколько библиотек DLL, которые необходимо скопировать в каталог bin после публикации в VS2010.

Я попытался поместить следующее в мой файл .csproj (который находится в корневой папке веб-приложений), но, похоже, он не работает:

<Target Name="AfterBuild">
  <ItemGroup>
    <_CircularDependencies Include="DLLs\Circular\Dependencies\*.dll" />
  </ItemGroup>
  <Copy
    SourceFiles="@(_CircularDependencies)" 
    DestinationFiles="@(_CircularDependencies->'bin\%(Filename)%(Extension)')" 
    SkipUnchangedFiles="true" />
</Target>

Для бонусных баллов у меня есть еще один набор DLL, скопированных для копирования после публикации, но я хочу использовать один набор при выполнении отладочной публикации (для Win32) и другой набор при выполнении публикации выпуска (x86).

Спасибо!

Ответы [ 3 ]

5 голосов
/ 17 марта 2011

ОК, мне удалось заставить это работать полностью.Благодаря ответам, представленным выше, я смог добавить некоторые команды MS Build в файл .csproj, чтобы скопировать соответствующие библиотеки DLL из различных папок в папку bin на основе текущей конфигурации сборки.Однако, поскольку это неуправляемые библиотеки DLL (т.е. не .NET), я не могу создать нормальные ссылки на них, и они не могут быть скопированы во время публикации.Я справился с этим, динамически добавив файлы в проект как «контент».

Решение состояло из трех частей.Во-первых, создайте группу элементов для файлов в верхней части файла .csproj (здесь я попытался использовать общие имена файлов, чтобы сделать его более понятным) с условиями, основанными на текущей конфигурации сборки:

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <_UnmanagedDLLs Include="Win32DLLs\*.dll" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Release'">
  <_UnmanagedDLLs Include="x64DLLs\*.dll" />
</ItemGroup>

Затем добавьте еще одну группу элементов, чтобы включить эти библиотеки DLL (как содержимое, а не ссылки) в сборку:

<ItemGroup>
  <Content Include="@(_UnmanagedDLLs->'bin\%(Filename)%(Extension)')" />
</ItemGroup>

Наконец, в нижней части файла .csproj я делаю копию на AfterBuildtarget:

<Target Name="AfterBuild">
  <Copy SourceFiles="@(_UnmanagedDLLs)" DestinationFiles="@(_UnmanagedDLLs->'bin\%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
</Target>

Это означает, что я могу сделать отладочную публикацию для своего промежуточного окна Windows 32 и публикацию выпуска для своего производственного бокса x64, не используя папку bin из SVN.

1 голос
/ 14 марта 2011

После того, как вы получите работающую копию, отдельные наборы для отладки / выпуска легко выполнить с условием:

<ItemGroup Condition="'$(Configuration)' == 'Release'">
  <_CircularDependencies Include="DLLs\Circular\Dependencies\*.dll" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <_CircularDependencies Include="DebugDLLs\Circular\Dependencies\*.dll" />
  <_CircularDependencies Include="DebugDLLs\Circular\Dependencies\*.pdb" />
</ItemGroup>
0 голосов
/ 15 марта 2011

Если вы хотите, чтобы ваша копия появлялась после публикации, а не после сборки, вам нужно изменить цель с:

<Target Name="AfterBuild">

до

<Target Name="AfterPublish">
...