2022/6/26
初版
dotnet環境でC#を動かす。
dotnet環境の特徴として、windows,linuxなどのマルチプラットフォームで動作するので、
ここでは、winodews,linux(ubuntu)でのインストールとビルド実行について説明する。
実行サンプルとして、OSCとOpenXmlを利用したものを紹介する。
以下の手順でdotnet環境をインストールする:
https://dotnet.microsoft.com/ja-jp/download/dotnet/thank-you/sdk-6.0.301-windows-x64-installer
Ubuntu に .NET SDK または .NET ランタイムをインストールする
上のリンクにある説明どおり以下を実行する:
#「20.04」は、実際に使用しているubuntuのバージョン番号を代入する。
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-sdk-6.0
sudo apt-get install -y aspnetcore-runtime-6.0
インストールが終わったので以下の手順でプロジェクトを作成する:
# dotnetのバージョンを確認する
dotnet --version
6.0.301
# プロジェクトを作成する(TestOSCはプロジェクト名で任意)
dotnet new console -o TestOSC
# プロジェクトのディレクトリに入る
cd TestOSC
# 実行の確認
dotnet run
# 雛形のプログラムが実行される
Hello, World!
この時点で、プログラムの雛形のProgram.csとプロジェクトファイル.csprojが作成される。
雛形のプログラムの内容を実際に使用するプログラムに変更する。
ここではOSC受信のプログラムを使用する:
本プログラムは以下のzipをダウンロードして利用する:
https://beta-notes.way-nifty.com/blog/files/PocketBeagleCS.zip
Program.cs
using System;
using System.Net;
using System.Threading;
using Rug.Osc;
class Program
{
static OscReceiver receiver;
static Thread thread;
static void Main(string[] args)
{
// This is the port we are going to listen on
//int port = 12345;
int port = 12000;
// Create the receiver
receiver = new OscReceiver(port);
// Create a thread to do the listening
thread = new Thread(new ThreadStart(ListenLoop));
// Connect the receiver
receiver.Connect();
// Start the listen thread
thread.Start();
// wait for a key press to exit
Console.WriteLine("Press any key to exit");
Console.ReadKey(true);
// close the Reciver
receiver.Close();
// Wait for the listen thread to exit
thread.Join();
}
static void ListenLoop()
{
try
{
while (receiver.State != OscSocketState.Closed)
{
// if we are in a state to recieve
if (receiver.State == OscSocketState.Connected)
{
// get the next message
// this will block until one arrives or the socket is closed
OscPacket packet = receiver.Receive();
// Write the packet to the console
Console.WriteLine(packet.ToString());
// DO SOMETHING HERE!
}
}
}
catch (Exception ex)
{
// if the socket was connected when this happens
// then tell the user
if (receiver.State == OscSocketState.Connected)
{
Console.WriteLine("Exception in listen loop");
Console.WriteLine(ex.Message);
}
}
}
}
上のプログラムで必要なパッケージを追加する。
dotnet add package Rug.OSC -s https://www.nuget.org/api/v2
# 実行
dotnet run
# 警告などが出るが正常に実行される
# 実行せずにビルドする
dotnet build
# 以下に実行ファイル(.exe)が作成される
# linux(ubuntu)の場合、TestOSC(.exe無し)になる
ls bin\Debug\net6.0
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2014/01/05 6:45 74240 Rug.Osc.dll
-a---- 2022/06/25 12:16 963 TestOSC.deps.json
-a---- 2022/06/25 12:16 5632 TestOSC.dll
-a---- 2022/06/25 12:16 148992 TestOSC.exe
-a---- 2022/06/25 12:16 10612 TestOSC.pdb
-a---- 2022/06/25 12:16 147 TestOSC.runtimeconfig.json
OSC送信は、iPhoneアプリのTouchOSCを使用してPCへOSCメッセージを送ると以下が出力される。
TouchOSCの設定として以下を設定する:
Host(IP): PCのIPアドレス
Port(outgoing): 12000
https://apps.apple.com/app/touchosc/id1569996730
TouchOSC
実行出力例: TouchOSCのフィーダーやボタンを操作すると以下のような出力が出る:
/1/toggle1, 0f
/1/toggle1, 1f
/1/toggle2, 0f
/1/toggle2, 1f
/1/toggle3, 0f
/1/toggle3, 1f
/1/toggle4, 0f
/1/toggle4, 1f
/1/fader5, 0.11524164f
/1/fader5, 0.13754646f
/1/fader5, 0.15427509f
/1/fader1, 0.37974685f
/1/fader1, 0.37763715f
/1/fader1, 0.4156118f
/1/fader1, 0.45991564f
/1/fader1, 0.4957806f
/1/fader3, 0.664557f
/1/fader3, 0.6476793f
/1/fader2, 0.7194093f
/1/fader2, 0.70675105f
/1/fader4, 0.4113924f
/1/fader4, 0.42405063f
/1/fader4, 0.43248945f
/1/fader3, 0.6118144f
/1/fader3, 0.5274261f
/1/fader5, 0.18215613f
別のサンプルとしてOpnXmlのパッケージを利用したサンプルを実行してみる。
以下にあるサンプルを利用する:
[方法] ワープロ ドキュメントに表を追加する (Open XML SDK)
参照:Office Open XML
以下を実行する:
dotnet new console -o OpenXmlTest
cd OpenXmlTest
# Program.csを編集してサンプルソースにする
code Program.cs
# 必要なパッケージを追加する
dotnet add package DocumentFormat.OpenXml -s https://www.nuget.org/api/v2
# AddTable.docxを作成する(enmtyで良い)
# MS-WORDがない場合、LibreOffice_Writerで
# 新規文書を作成して、docxで保存する
dotnet run
# 警告などが出るが正常に実行される
# 実行するとAddTable.docxに表が追加される。
Prgram.cs
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace console
{
public class Program
{
//<<<<<<<<<<<<<
// Take the data from a two-dimensional array and build a table at the
// end of the supplied document.
public static void AddTable(string fileName, string[,] data)
{
using (var document = WordprocessingDocument.Open(fileName, true))
{
var doc = document.MainDocumentPart.Document;
Table table = new Table();
TableProperties props = new TableProperties(
new TableBorders(
new TopBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new BottomBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new LeftBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new RightBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new InsideHorizontalBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
},
new InsideVerticalBorder
{
Val = new EnumValue<BorderValues>(BorderValues.Single),
Size = 12
}));
table.AppendChild<TableProperties>(props);
for (var i = 0; i <= data.GetUpperBound(0); i++)
{
var tr = new TableRow();
for (var j = 0; j <= data.GetUpperBound(1); j++)
{
var tc = new TableCell();
tc.Append(new Paragraph(new Run(new Text(data[i, j]))));
// Assume you want columns that are automatically sized.
tc.Append(new TableCellProperties(
new TableCellWidth { Type = TableWidthUnitValues.Auto }));
tr.Append(tc);
}
table.Append(tr);
}
doc.Body.Append(table);
doc.Save();
}
}
static void Main(string[] args)
{
//const string fileName = @"C:\Users\Public\Documents\AddTable.docx";
const string fileName = @"AddTable.docx";
AddTable(fileName, new string[,]
{ { "Texas", "TX" },
{ "California", "CA" },
{ "New York", "NY" },
{ "Massachusetts", "MA" } }
);
}
//>>>>>>>>>>>>>
}
}
PocketBeagleでのC#(mono)インストールメモ
スプレッドシート (Open XML SDK)
ワープロ (Open XML SDK)
プレゼンテーション (Open XML SDK)
以上