SlideShare a Scribd company logo
新しいcspojの紹介
安井彰一
@Shaula0x0400
自己紹介
Facebook:安井彰一
Twitter:@Shaula0x0400
Github:the9ball
株式会社オレンジキューブ所属
csprojの中身
旧形式
なにがなんだかわからない!!!
新形式
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
</Project>
たったこれだけ!!!
新形式の利点
● 短く簡潔!
○ ソースコードを列挙しなくて良い
○ パッケージへの参照を自動で辿ってくれる
■ 参照先のプロジェクトに必要な参照を
参照元では管理する必要がない
○ コンフリクト地獄からの開放
● 旧形式からの移行が簡単
ソースコードを列挙しなくて良い とは
● 旧形式だと以下のような
ソースコードの列挙が必要だった
<ItemGroup>
<Compile Include="hogefuga.cs" />
...
<Compile Include="Program.cs" />
<Compile Include="Properties¥AssemblyInfo.cs" />
</ItemGroup>
コンフリクトの主な原因
Nuget等の参照を自動で辿ってくれる
● 旧形式だと以下のように参照先で必要なパッケージを
参照元からも参照する必要があった
ClassLibrary Application
Package
この参照が必要だった
新形式への移行
移行方法
● 参照パッケージをメモ
● シンボル定義をメモ
● 新形式の雛形をコピペ
● TargetFrameworkを書き換え
● 参照パッケージを追加(復元)
● シンボル定義を追加(復元)
移行方法 - 参照パッケージをメモ
● csprojに記載がある場合
○ <ItemGroup><Reference Include=...
● package.json
○ “dependencies”: {...
移行方法 - シンボル定義をメモ
● ビルド構成毎に設定されているので必要なものをメモ
<PropertyGroup Condition=...>
...
<DefineConstants>...</DefineConstants>
...
移行方法 - 新形式の雛形をコピペ
● テキストエディタなどでcsprojを開く(以降省略)
○ VSの場合はUnload Project -> Edit *.csproj
● 雛形をコピペ
○ .NET Coreのプロジェクトテンプレートを流用
○ 他のプロジェクトの中身を流用
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
移行方法 - TargetFrameworkを書き換え
● TargetFrameworkを書き換える
○ .NET Framework なら netXXX ( net35 net462 )
○ .NET Core なら netcoreappX.X / netstandardX.X
○ プロジェクトのプロパティからも変更可能だが
.NET Framework ⇔ .NET Coreの切り替えはできない模様
移行方法 - 参照パッケージを追加(復元)
● パッケージを追加
○ VSの場合はDependenciesを右クリックしてGUI操作
<ItemGroup>
<!-- Nuget -->
<PackageReference Include="パッケージ名" Version="バージョン" />
<!-- Project -->
<ProjectReference Include="csprojまでの相対パス" />
<ItemGroup>
移行方法 - シンボル定義を追加(復元)
● 元々あった定義をそのままコピペ
○ VSの場合はプロパティ - ビルドからGUIで設定可能
<PropertyGroup Condition=...>
<DefineConstants>...</DefineConstants>
</PropertyGroup>
移行方法 - ビルドしてみる
● ビルドがうまくいかない場合
○ 改修前のもので特殊な設定があれば
そのままコピペしてきてみる
○ リファレンスを調べる
■ MSBuild プロジェクト ファイル スキーマ リファレンス
https://docs.microsoft.com/ja-jp/visualstudio/msbuild/msbuild-
project-file-schema-reference
■ MSBuild プロジェクトの共通プロパティ
Tips
参照パッケージのバージョンを自動解決できない
以下のようなエラーが発生した場合
ファイルまたはアセンブリ 'XXXX, Version=X.X.X.X, Culture=neutral,
PublicKeyToken=XXXXXXXX、またはその依存関係の 1 つが読み込めませんでし
た。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。
(HRESULT からの例外:0x80131040)
原因
参照しているパッケージのバージョン定義が不揃いである
参照パッケージのバージョンを自動解決できない
参照しているパッケージのバージョン定義が不揃いである
ClassLibraryA
Application
PackageC v1
ClassLibraryB
PackageC v2
どちらのバージョンを
使用すべきかわからない
参照パッケージのバージョンを自動解決できない
どのバージョンを使用するのかを指定する
● app.config ファイルを作成する
● bindingRedirect 属性を指定する
○ <bindingRedirect> Element
https://docs.microsoft.com/en-
us/dotnet/framework/configure-apps/file-
schema/runtime/bindingredirect-element
複数フレームワークバージョン指定
● TargetFramework を TargetFrameworks に書き換え
● ;区切りでバージョンを列挙
<TargetFrameworks>net462;netcoreapp1.1</TargetFrameworks>
● VS上ではそれぞれの状態を切り替え可能
csprojの外側にあるファイルを参照する
● csprojと同じディレクトリから下にあるcsファイルは
自動的にプロジェクト参照に追加される
● csprojの外側にあるファイルを参照する場合は
以下のタグを追加する
<ItemGroup>
<Compile Include="csファイルへのパス" />
</ItemGroup>
csprojの外側にあるファイルを参照する
● ファイルをプロジェクトエクスプローラ上で表示したい場合
<Compile Include="csファイルへのパス" Link="ファイル名" />
● 特定ディレクトリ以下の
ファイルすべてを参照したい場合
<Compile Include="ディレクトリへのパス¥**¥*.cs"
Exclude="ディレクトリへのパス¥AssemblyInfo.cs;ディレクトリへのパス¥obj¥**¥*.cs"
/>
csprojの外側にあるファイルを参照する
● VS上ではそれぞれの状態を切り替え可能
ビルドイベント
● PreBuild/PostBuildイベント
○ 旧形式ではPreBuildEvent/PostBuildEventタグ
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="コマンド" />
</Target>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="コマンド" />
</Target>
外部ファイルの参照
● 他のファイルに記載した内容をそのまま展開する
<Import Project="ファイルへのパス" />
NugetPackageの作成
● NugetPackage作成に必要だったnuspecファイルは
新形式だと不要になった
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
● Authorsなどの付加情報は<Authors>などのタグで追加する
● VSだとプロジェクトのプロパティで編集可能
最後に
オレンジキューブでは、一緒に
ゲームを作ってくれる仲間を募集しています。
以下のどれか1つでも当てはまる場合はおすすめです。
是非一度お話をしましょう。
・C# が好き
・ワンソースマルチプラットフォームで海外展開しているクリユニに興味がある
・短時間で決着する対戦ゲームに興味がある
・リッチなドット絵のゲームに興味がある
・ローグライクゲームが好き
・さらなるストラテジーの進化に挑戦してみたい
・ゲーム作るのも好きだが、プレイするのも大好き
もしご興味があればお気軽にご連絡ください。
https://www.wantedly.com/projects/114864

More Related Content

Similar to 新しいCspojの紹介

2005 re-reverse engineering goal models from legacy code
2005 re-reverse engineering goal models from legacy code2005 re-reverse engineering goal models from legacy code
2005 re-reverse engineering goal models from legacy coden-yuki
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
Yuya Matsushima
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
l_b__
 
Cryogenでサイトつくろーじぇん
CryogenでサイトつくろーじぇんCryogenでサイトつくろーじぇん
Cryogenでサイトつくろーじぇん
Kazuhiro Hara
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Yoichi KIKUCHI
 
D8でコンテンツをレイアウトする手法について
D8でコンテンツをレイアウトする手法についてD8でコンテンツをレイアウトする手法について
D8でコンテンツをレイアウトする手法について
Kenji Shirane
 
【Swift】SDKの読み込みにuse framework!が使えない場合の対処方法
【Swift】SDKの読み込みにuse framework!が使えない場合の対処方法【Swift】SDKの読み込みにuse framework!が使えない場合の対処方法
【Swift】SDKの読み込みにuse framework!が使えない場合の対処方法
natsumo
 
Start python with fastapi
Start python with fastapiStart python with fastapi
Start python with fastapi
ku_taka
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
Megagon Labs
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
hecomi
 
AndroidでActiveRecordライクにDBを使う
AndroidでActiveRecordライクにDBを使うAndroidでActiveRecordライクにDBを使う
AndroidでActiveRecordライクにDBを使う
Fujimura Munehiko
 
Xcode4 project template (slide)
Xcode4 project template (slide)Xcode4 project template (slide)
Xcode4 project template (slide)
Wataru Kimura
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
貴志 上坂
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
You&I
 
20090704rubyist九州
20090704rubyist九州20090704rubyist九州
20090704rubyist九州
koki_h
 
Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料
Takako Miyagawa
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
一希 大田
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
 

Similar to 新しいCspojの紹介 (20)

2005 re-reverse engineering goal models from legacy code
2005 re-reverse engineering goal models from legacy code2005 re-reverse engineering goal models from legacy code
2005 re-reverse engineering goal models from legacy code
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
Cryogenでサイトつくろーじぇん
CryogenでサイトつくろーじぇんCryogenでサイトつくろーじぇん
Cryogenでサイトつくろーじぇん
 
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティスJsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス
 
D8でコンテンツをレイアウトする手法について
D8でコンテンツをレイアウトする手法についてD8でコンテンツをレイアウトする手法について
D8でコンテンツをレイアウトする手法について
 
【Swift】SDKの読み込みにuse framework!が使えない場合の対処方法
【Swift】SDKの読み込みにuse framework!が使えない場合の対処方法【Swift】SDKの読み込みにuse framework!が使えない場合の対処方法
【Swift】SDKの読み込みにuse framework!が使えない場合の対処方法
 
Start python with fastapi
Start python with fastapiStart python with fastapi
Start python with fastapi
 
PSGIへの誘い
PSGIへの誘いPSGIへの誘い
PSGIへの誘い
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
 
AndroidでActiveRecordライクにDBを使う
AndroidでActiveRecordライクにDBを使うAndroidでActiveRecordライクにDBを使う
AndroidでActiveRecordライクにDBを使う
 
Xcode4 project template (slide)
Xcode4 project template (slide)Xcode4 project template (slide)
Xcode4 project template (slide)
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
20090704rubyist九州
20090704rubyist九州20090704rubyist九州
20090704rubyist九州
 
Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料Idcfクラウド 初心者の事始め(2)資料
Idcfクラウド 初心者の事始め(2)資料
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 

新しいCspojの紹介

Editor's Notes

  1. Unityというか.NET3.5
  2. Unityというか.NET3.5
  3. Unityというか.NET3.5
  4. Unityというか.NET3.5
  5. Unityというか.NET3.5
  6. Unityというか.NET3.5
  7. Unityというか.NET3.5