2016-05-04 6 views
0

バッチファイルの書き込みとVisual Studio(最も重要なのはVisual Studio 2013)の幹部に、以下のことが可能かどうかを知りたい:バッチファイルを使用してVisual Studio 2013でDLLを作成し、参照を更新する

多くのプロジェクトは、他のプロジェクトで生成されたDLLに依存しています(実際は滝のような形です)。私はそれが対応するDLLを生成するためにすべてのプロジェクトをビルドするバッチファイルを書くことが可能であるかどうかを知りたいと思いますし、新しく組み立てられたdll(バッチファイルも)への参照を更新します。

これも可能ですか?私はNuGetやその他のソフトウェアのような拡張機能を使用しないでください。

答えて

1

適切な言語/ツールを選択してビルドします。 msbuildはあなたがこの種のものを書くツール(そして言語の種類)です。ビルドスクリプトと呼ばれています。彼らはバットスクリプトではありません。 .batスクリプトは使用しないでください。それは20年前のことでした。

以下は、基本的なmsbuildスクリプトファイルです。それは

  1. の.sln
  2. は、zipファイルにファイルを圧縮フォルダ
  3. にcsprojの(通常はGUIのcsproj)のうちの一つのファイルをコピーするビルドします

あなたはでしょうあなたがいることを実行した後

は、あなたがからMSBuild.exe

でファイルを実行します「MyBuildScript.proj」(またはMyBuildScript.msbuild)と呼ばれるファイルでこれを置きますビルド・ロジックを記述する方法である
"%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" /target:AllTargetsWrapped "MyBuildScript.proj" /p:Configuration=Debug;FavoriteFood=Popeyes /l:FileLogger,Microsoft.Build.Engine;logfile=MyBuildScript.proj.Release.log 

(MyBuildScript.proj)

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

    <PropertyGroup> 
     <!-- Get this project from http://msbuildextensionpack.codeplex.com/releases/view/105659 --> 
     <MSBuildExtensionPackFoundPath Condition="Exists('$(MSBuildExtensionsPath64)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks')">$(MSBuildExtensionsPath64)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks</MSBuildExtensionPackFoundPath> 
     <MSBuildExtensionPackFoundPath Condition="Exists('$(MSBuildExtensionsPath32)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks')">$(MSBuildExtensionsPath32)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks</MSBuildExtensionPackFoundPath> 
     <MSBuildExtensionPackFoundPath Condition="Exists('$(MSBuildExtensionsPath)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks')">$(MSBuildExtensionsPath)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks</MSBuildExtensionPackFoundPath> 
     <MSBuildExtensionPackFoundPath Condition="$(MSBuildExtensionPackFoundPath)==''">CouldNotFindBaseDirectoryCheckForInstalledProduct\MSBuild.ExtensionPack.tasks</MSBuildExtensionPackFoundPath>  
    </PropertyGroup> 
    <Import Project="$(MSBuildExtensionPackFoundPath)"/> 

    <PropertyGroup> 
     <!-- Always declare some kind of "base directory" and then work off of that in the majority of cases --> 
     <WorkingCheckout>.</WorkingCheckout> 
     <WorkingDir>.</WorkingDir> 
     <ArtifactDestinationFolder>$(WorkingCheckout)\ZZZArtifacts</ArtifactDestinationFolder> 
     <ZipArtifactDestinationFolder>$(WorkingDir)\ZZZZipArtifacts</ZipArtifactDestinationFolder>  
    </PropertyGroup> 

    <Target Name="AllTargetsWrapped"> 

     <CallTarget Targets="CleanArtifactFolder" /> 
     <CallTarget Targets="BuildItUp" /> 
     <CallTarget Targets="CopyFilesToArtifactFolder" /> 
     <CallTarget Targets="ZipItUp" /> 
    </Target> 

    <Target Name="BuildItUp" > 
     <MSBuild Projects="$(WorkingCheckout)\Solution1.sln" Targets="Build" Properties="Configuration=$(Configuration)"> 
      <Output TaskParameter="TargetOutputs" ItemName="TargetOutputsItemName"/> 
     </MSBuild> 
     <Message Text="BuildItUp completed" /> 
    </Target> 

    <Target Name="CleanArtifactFolder"> 

     <RemoveDir Directories="$(ArtifactDestinationFolder)" Condition="Exists($(ArtifactDestinationFolder))"/> 
     <MakeDir Directories="$(ArtifactDestinationFolder)" Condition="!Exists($(ArtifactDestinationFolder))"/> 

     <RemoveDir Directories="$(ZipArtifactDestinationFolder)" Condition="Exists($(ZipArtifactDestinationFolder))"/> 
     <MakeDir Directories="$(ZipArtifactDestinationFolder)" Condition="!Exists($(ZipArtifactDestinationFolder))"/>    

     <Message Text="Cleaning done" /> 

    </Target> 

    <Target Name="CopyFilesToArtifactFolder"> 

     <ItemGroup> 
      <MyExcludeFiles Include="$(WorkingDir)\**\*.doesnotexist" /> 
     </ItemGroup> 

     <ItemGroup> 
      <MyIncludeFiles Include="$(WorkingDir)\CsProjectOne\bin\$(Configuration)\**\*.*" Exclude="@(MyExcludeFiles)"/> 
     </ItemGroup>   

     <Copy 
       SourceFiles="@(MyIncludeFiles)" 
       DestinationFiles="@(MyIncludeFiles->'$(ArtifactDestinationFolder)\%(Filename)%(Extension)')" 
     /> <!-- %(RecursiveDir) --> 

     </Target> 

     <Target Name="ZipItUp"> 

      <ItemGroup> 
       <NonConfigFilesExcludeFiles Include="$(ArtifactDestinationFolder)\**\*.doesnotexist" /> 
      </ItemGroup> 

      <ItemGroup> 
       <NonConfigFilesIncludeFiles Include="$(ArtifactDestinationFolder)\**\*" Exclude="@(NonConfigFilesExcludeFiles)"/> 
      </ItemGroup> 

      <!-- Create a zip file based on the FilesToZip collection --> 
      <MSBuild.ExtensionPack.Compression.Zip TaskAction="Create" CompressFiles="@(NonConfigFilesIncludeFiles)" RemoveRoot="$(ArtifactDestinationFolder)" ZipFileName="$(ZipArtifactDestinationFolder)\MyOutputFile.zip"/> 
      <!-- --> 

     </Target>  

    </Project> 

。そこには他のビルドツールがありますが、これはデフォルトのdotNetのツールです。

.batファイルを維持管理するのは難しいとは言わないでください。

ジョブに適切なツールを使用してください。

PS「msbuildextensionpack」は、msbuildの拡張の例です。 msbuildには多くの便利な拡張機能があります。時間の99%、誰かがあなたがする必要があることをするのに役立つmsbuild拡張を書いています。

ftpクライアントの宛先にファイルを送信する必要がありますか?誰かがすでに仕事を書いています。

一部の.xmlファイルを操作する必要がありますか?誰かがすでに仕事を書いています。

(この例のように)ファイルを圧縮する必要があります。誰かがすでに仕事を書いています。

何か主流...何かが既に仕事を書いています。

関連する問題