Stiamo usando .NET 3.5 con VS2008. Ho una soluzione con circa 20 progetti in esso, e quel numero crescerà nel tempo man mano che l'applicazione cresce e aggiunge nuovi moduli. Oggi avevo bisogno di impostare una proprietà su ogni progetto. Ho dovuto modificare ogni file csproj di aggiungere il seguente:MSBuild - Imposta proprietà per soluzione
<Target Name="BeforeBuild">
<CreateProperty Condition=" '$(SolutionDir)' != '' And '$(SolutionDir)' != '*Undefined*' "
Value="$(SolutionDir)Tools\MSBuild">
<Output TaskParameter="Value" PropertyName="AlToolPath" />
</CreateProperty>
</Target>
Questo per consentire ai progetti di trovare il linker di montaggio (Al.exe) memorizzata nel mio repository sorgente in modo che la build è macchina agnostica (puoi controllare e costruire su qualsiasi macchina con .NET senza dover installare l'SDK). La soluzione è costruita sulla riga di comando usando MSBuild dagli sviluppatori, installa file batch, CCNet, ecc.
In ogni caso, ho cercato un modo migliore per farlo (ad esempio qualcosa come le proprietà del livello della soluzione) ma non è stato possibile trovarne uno. So che è possibile impostare il valore della proprietà nella riga di comando di MSBuild, ma questo non è adatto per me dal momento che tutte le righe di comando esistenti e future dovrebbero includerlo. Ho anche pensato di chiamare un obiettivo prima nel primo progetto costruito per utilizzare un'attività personalizzata per impostare una variabile di ambiente e un target successivo nell'ultimo progetto per rimuoverlo, ma ciò sembrava più pesante e fragile rispetto alla semplice modifica di tutti i file di progetto singolarmente .
Per favore fatemi sapere se avete fatto qualcosa del genere o conoscete un modo per impostare una proprietà una volta per soluzione che può essere utilizzata da più progetti (incluso .NET 4/VS2010 di cui non ho esperienza). Ricorda che stiamo usando MSBuild per creare il file sln, non i singoli progetti.
Mi piace questa soluzione, ma significa comunque che i file di progetto devono essere modificati almeno una volta. – Mafuba
@Mafuba L'ho automatizzato usando NuGet. –
fyi utilizzando VS 2017 se un file di oggetti condivisi è chiamato 'Directory.Build.props' sarà automaticamente importato in tutti i progetti nella gerarchia di directory. –