2011-08-09 2 views
0

J'ai un msbuild qui appelle un fichier *.sln lors de la compilation. Ce fichier de solution contient 10 projets cs, l'un d'eux (appelons-le main.csproject) a le AssemblyName comme WinMusic. Le contenu du msbuild est la suivante:Modifier AssemblyName d'un csproject via msbuild

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 


    <PropertyGroup> 
    <!-- Default value here --> 
    <DefineConstants Condition=" '$(DefineConstants)'==''" >TRACE</DefineConstants> 
    <SlnFiles Condition=" '$(SlnFiles)'==''" >FullProject.sln</SlnFiles> 
    </PropertyGroup> 

<!-- <ItemGroup> --> 
    <!-- <SlnFiles Include="SlnFiles=$(SlnFiles2)"/> --> 
    <!-- </ItemGroup> --> 

    <Target Name="Build"> 
    <MSBuild Projects="$(SlnFiles)" 
       Properties="DefineConstants=$(DefineConstants)"/> 
    </Target> 

</Project> 

Ma question est, comment définir la propriété AssemblyName de la tâche msbuild ci-dessus? Pour clarifier, je parle de AssemblyName dans csproject, pas de AssemblyInfo.cs.

Edit: Voici le nouveau fichier build.proj j'ai essayé, le FullProject.sln est un fichier de solution avec un exe et une dll, mais le fichier msbuild renommé à la fois le dll et l'exe à NoMusic. Ce que je veux, c'est juste de renommer l'exe en NoMusic et la DLL devrait conserver le même nom.

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 


    <PropertyGroup> 
    <!-- Default value here --> 
    <DefineConstants Condition=" '$(DefineConstants)'==''" >TRACE</DefineConstants> 
    <SlnFiles Condition=" '$(SlnFiles)'==''" >FullProject.sln</SlnFiles> 
    </PropertyGroup> 


    <Target Name="Build"> 
    <MSBuild Projects="$(SlnFiles)" 
       Properties="DefineConstants=$(DefineConstants)"/> 

    <MSBuild Projects="WindowsFormsApplication1\WindowsFormsApplication1.csproj" 
     Properties="DefineConstants=$(DefineConstants);Platform=ANYCPU;AssemblyName=NoMusic"/> 
    </Target> 

</Project> 

Répondre

2

Il suffit de faire ceci:

<Target Name="Build"> 
    <MSBuild Projects="@(SlnFiles)" 
      Properties="DefineConstants=$(DefineConstants)"/> 

    <MSBuild Projects="main.csproject.csproj" 
     Properties="AssemblyName=NoMusic"/> 

Amour de savoir pourquoi si.

+0

De cette façon, vous redéfinissez la propriété dans le projet de la même manière que 'msbuild.exe main.csproject.csproj/p: AssemblyName = NoMusic'. Jetez un oeil à la documentation MSBuild si vous ne savez pas ce que fait le commutateur '/ p'. –

+1

[ici] (http://social.msdn.microsoft.com/Forums/en/msbuild/thread/95a04398-05c1-4fea-b596-abbe156e6a84) contient des informations détaillées sur le processus d'évaluation des propriétés dans MSBuild. –

+4

@James, je ne pense pas que cela fonctionne; Si vous avez 2 projets (un exe, un autre dll) dans votre solution, alors la DLL et l'exe seront renommés en "NoMusic", ce qui n'est évidemment pas ce que je veux. – Graviton

Questions connexes