Ho avuto lo stesso problema ma non volevo modificare le cose all'esterno dell'albero di origine per farlo funzionare. Aggiungere file a C: \ Programmi ... significa che devi farlo manualmente su ogni macchina di sviluppo per ottenere lo stesso comportamento.
ho fatto tre cose:
1) ha creato un file di obiettivi personalizzati che ho importare in ogni C# e/o VB/F # progetto nella mia soluzione aggiungendo quanto segue a ogni file proj:
<!-- Rest of project file -->
<PropertyGroup Condition="'$(SolutionDir)' == '' or '$(SolutionDir)' == '*undefined*'">
<!-- Relative path to containing solution folder -->
<SolutionDir>..\</SolutionDir>
</PropertyGroup>
<Import Project="$(SolutionDir)CommonSettings.targets" />
2) ha aggiunto un obiettivo pulito che viene chiamato dopo che il vero Clean (utilizzando i AfterTargets attributo da MSBuild 4,0):
<Target Name="CleanCs" AfterTargets="Clean">
<Message Text="Deep cleaning C# project..." />
<CreateItem Include="$(OutDir)**\*.*; $(ProjectDir)\obj\**\*.*; $(IntermediateOutputPath)**\*.*"
Exclude="**\bin\**\*.vshost.exe; $(IntermediateOutputPath)**\*.log">
<Output TaskParameter="Include" ItemName="AfterClean_FilesToDelete"/>
</CreateItem>
<Delete Files="@(AfterClean_FilesToDelete)" />
<CreateItem Include="$(ProjectDir)\obj\" >
<Output TaskParameter="Include" ItemName="AfterClean_DirectoriesToDelete" />
</CreateItem>
<CreateItem Include ="$(ProjectDir)\bin\" Condition="'$(TargetExt)' != '.exe'" >
<Output TaskParameter="Include" ItemName="AfterClean_DirectoriesToDelete"/>
</CreateItem>
<RemoveDir ContinueOnError="true" Directories="@(AfterClean_DirectoriesToDelete)" />
</Target>
3) Nel mio integrazione continua di progetto MSBuild i controllare e assicurarsi che tutti i file proj hanno # 1:
<ItemGroup>
<!-- Exclude viewer acceptance tests as they must compile as x86 -->
<CheckProjects_CsProjects Include="**\*.csproj" />
</ItemGroup>
<Target Name="CheckProjects">
<!--
Look for C# projects that don't import CommonSettingsCs.targets
-->
<XmlRead XPath="//n:Project[count(n:Import[@Project[contains(string(), 'CommonSettingsCs.targets')]]) = 0]/n:PropertyGroup/n:AssemblyName/text() "
XmlFileName="%(CheckProjects_CsProjects.Identity)"
Namespace="http://schemas.microsoft.com/developer/msbuild/2003"
Prefix="n" >
<Output TaskParameter="Value" ItemName="CheckProjects_CsMissingImports"/>
</XmlRead>
<Error Text="Project missing CommonSettingsCs.targets: %(CheckProjects_CsMissingImports.Identity)"
Condition="'%(CheckProjects_CsMissingImports.Identity)' != ''" />
</Target>
Questo impedisce agli sviluppatori di dimenticare di aggiungere # 1. Puoi creare il tuo modello di progetto per assicurarti che tutti i nuovi progetti abbiano questo di default.
Il vantaggio di questo approccio è la creazione di una nuova struttura di origine arruolamento non comporta nulla di più di ottenere l'albero dei sorgenti corrente. Lo svantaggio è che devi modificare i file di progetto una volta quando li crei.
fonte
2010-08-07 19:24:10
Ok ho capito. Sono entrato in questo file di progetto temporaneo e include Build, Clean, Rebuild and Publish. Nessuna importazione da common.targets.files. Peccato, dovrò trovare un'altra soluzione. –
Questo non si applica a qualsiasi build di Visual Studio, giusto? – Maslow