44234


タイトルの件、ズバリ可能でしょうか？

ビルドやSetupProjectの出力対象としたときに、参照するライブラリだけ出力して  
自分自身のライブラリは、コードも1行も書いていない（*.csファイルがプロジェクトに無い）ので  
出力しないようにしたいです。

よろしくお願いいたします。


CC BY-SA 4.0
2018-05-24T11:24:44.780
44222
2018-05-27T03:58:39.920
9228
question
c# visual-studio
C# アセンブリ出力無しのプロジェクトをVisual Studioで作成できますか？


.csproj内部に`<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets"
/>`の記述がある場合はアセンブリ出力が記述されていないとコンパイルエラーになるため、おそらく出力しない.csprojを作成することは不可能ではないかと考えています。  
[MSBuildプロパティ](https://msdn.microsoft.com/ja-
jp/library/bb629394.aspx)の`OutputPath`や`OutputType`を削除してもダメでした。

疑似的にアセンブリを出力しないプロジェクトは、下記で作成できますがいかがでしょうか。

  1. プロジェクトのプロパティ - アプリケーション - 出力の種類を「コンソール アプリケーション」に変える 
    * これで.csファイルを含まないプロジェクトがコンパイルできる
  2. プロジェクトのプロパティ - ビルドイベント - ビルド後イベントのコマンドラインにアセンブリを消すコマンドを追加する

del $(TargetFileName)  
del $(TargetFileName).config  
del $(TargetName).pdb


CC BY-SA 4.0
2018-05-25T01:02:02.790
44234
2018-05-25T01:02:02.790
9820
44222
answer


csproj ファイルのProject要素の DefaultTargets
に自分で定義したターゲットを指定することで、一応そういうことも可能ではあるかと思います。  
私の場合、以下のような感じでクラスライブラリプロジェクトと同列にNuGetパッケージのビルド用プロジェクトを作って、使っていたりします。

[code]

    <Project DefaultTargets="BuildNuPkg" ・・・・・>
      ・・・・・
      <Target Name="BuildNuPkg" Condition=" '$(Configuration)' == 'Release' ">
        ・・パッケージ作成タスク・・
      </Target>
    </Project>
    
[/code]

Copyタスクというものがあるので、それ使って以下のような感じも可能ではあります。

[code]

    <Project DefaultTargets="MyTask" ・・・・・>
      ・・・・・
      <Target Name="MyTask">
        <Copy SourceFiles="..\ClassLibrary1\bin\$(Configuration)\ClassLibrary1.dll" DestinationFolder="$(OutDir)" />
      </Target>
    </Project>
    
[/code]

ただ、この方法だと参照を増やしたらこの定義も増やさないといけないのでメンテナンス面で微妙かもしれませんけども。  
ビルドタスクの自作もできるようですがそういった方法や、他のビルドタスクで有用なものがないかとかまではそこまで詳しく把握していないのでわかりませんが。  
簡潔さや管理上は不要ファイルを削除するほうが良いかもしれませんね。


CC BY-SA 4.0
2018-05-27T03:58:39.920
44284
2018-05-27T03:58:39.920
44222
answer