2012-06-20 2 views
2

У меня есть эта цель MSBuild в моем файле csproj:Как исключить конкретный файл из моего MsBuild AfterBuild цели

<Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release' "> 
    <CreateItem Condition="'%(Extension)'=='.dll'" Include="@(ReferenceCopyLocalPaths)"> 
     <Output TaskParameter="Include" ItemName="IlmergeAssemblies" /> 
    </CreateItem> 
    <Exec Command="&quot;$(ProjectDir)..\..\..\tools\IlMerge\Ilmerge.exe&quot; /targetplatform:&quot;v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319&quot; /ndebug /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" /> 
    <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" /> 
</Target> 

Это работает как шарм. Но я хочу, чтобы исключить конкретный файл и попытался настроить его:

<Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release' "> 
    <CreateItem Condition="'%(Extension)'=='.dll' AND '%(Filename)' != 'Foo.dll'" Include="@(ReferenceCopyLocalPaths)"> 
     <Output TaskParameter="Include" ItemName="IlmergeAssemblies" /> 
    </CreateItem> 
    <Exec Command="&quot;$(ProjectDir)..\..\..\tools\IlMerge\Ilmerge.exe&quot; /targetplatform:&quot;v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319&quot; /ndebug /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" /> 
    <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" /> 
</Target> 

Однако, это не работает. Кто-нибудь знает, что я делаю неправильно?

+0

Я думаю, что (по памяти), что% (Имя файла) будет 'Foo' –

+0

Да, Ты прав. Просто понял то же самое. Вы хотите отказаться от ответа, чтобы я мог принять его? – Christoph

+0

Это случилось со мной однажды, но я не был уверен и не мог проверить его сейчас. Именно по этой причине я ставлю его комментарием. Я создал ответ сейчас. Счастлив, что ты исправил проблему :) –

ответ

4

% (имя файла) содержит только имя файла.

Таким образом, вы можете проверить % (Имя файла) Foo»! = '':

<Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release' "> 
<CreateItem Condition="'%(Extension)'=='.dll' AND '%(Filename)' != 'Foo'" Include="@(ReferenceCopyLocalPaths)"> 
    <Output TaskParameter="Include" ItemName="IlmergeAssemblies" /> 
</CreateItem> 
<Exec Command="&quot;$(ProjectDir)..\..\..\tools\IlMerge\Ilmerge.exe&quot; /targetplatform:&quot;v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319&quot; /ndebug /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" /> 
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" /> 

Смежные вопросы