質問編集履歴
13
ベストアンサー後
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,28 +1,16 @@
|
|
1
1
|
### ベストアンサー後
|
2
|
-
~~欠点が見つかりました
|
3
|
-
インテリセンスに表示させたいクラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。~~
|
4
|
-
一先ず出来たのですが、
|
5
|
-
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られるようにしていたのに
|
6
|
-
書き換えたら でなくなりました。
|
7
|
-
|
8
|
-
[インテリセンス 追加コード](https://sites.google.com/view/kmkzyozora/Home/Program/PowerShell/ReuseScript/Ex_TabExpansion2_psm1)
|
9
|
-
を全て選択して F8 で実行した場合は
|
10
|
-
表示されることが分かりました。
|
11
|
-
スクリプトファイルとして実行された場合のみのようです...
|
12
|
-
現在 対策を探しています。
|
13
|
-
|
14
|
-
表示できるようにするためにはF8等を使いコマンドとして必要があります。。
|
15
|
-
|
16
2
|
頂いたコードを参考に
|
17
3
|
書き直してみました。
|
18
4
|
|
19
5
|
既存のインテリセンスに追加 したかったのですが
|
20
6
|
`TabExpansion` では方法が分からなかったため `TabExpansion2`を書き換えました。
|
21
7
|
|
22
|
-
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られま
|
8
|
+
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られます。
|
9
|
+
なぜか ISEのスクリプトウィンドウ内だと 表示されませんが
|
10
|
+
コンソールだと表示されます。
|
23
|
-
|
11
|
+
一先ずここで妥協します。
|
24
12
|
|
25
|
-
|
13
|
+
psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
|
26
14
|
```powershell
|
27
15
|
文字数超過で載せられませんでした
|
28
16
|
下記記載の「インテリセンス 追加コード」へお願い致します。
|
12
ベストアンサー後
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,6 +4,11 @@
|
|
4
4
|
一先ず出来たのですが、
|
5
5
|
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られるようにしていたのに
|
6
6
|
書き換えたら でなくなりました。
|
7
|
+
|
8
|
+
[インテリセンス 追加コード](https://sites.google.com/view/kmkzyozora/Home/Program/PowerShell/ReuseScript/Ex_TabExpansion2_psm1)
|
9
|
+
を全て選択して F8 で実行した場合は
|
10
|
+
表示されることが分かりました。
|
11
|
+
スクリプトファイルとして実行された場合のみのようです...
|
7
12
|
現在 対策を探しています。
|
8
13
|
|
9
14
|
表示できるようにするためにはF8等を使いコマンドとして必要があります。。
|
@@ -14,7 +19,7 @@
|
|
14
19
|
既存のインテリセンスに追加 したかったのですが
|
15
20
|
`TabExpansion` では方法が分からなかったため `TabExpansion2`を書き換えました。
|
16
21
|
|
17
|
-
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られま~~す。~~
|
22
|
+
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られま~~す。~~せん....
|
18
23
|
原因追求中です。
|
19
24
|
|
20
25
|
ps1 か psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
|
11
ベストアンサー後
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,16 +1,21 @@
|
|
1
1
|
### ベストアンサー後
|
2
|
-
欠点が見つかりました
|
2
|
+
~~欠点が見つかりました
|
3
|
-
インテリセンスに表示させたいクラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。
|
3
|
+
インテリセンスに表示させたいクラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。~~
|
4
|
+
一先ず出来たのですが、
|
5
|
+
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られるようにしていたのに
|
4
|
-
|
6
|
+
書き換えたら でなくなりました。
|
5
7
|
現在 対策を探しています。
|
6
8
|
|
9
|
+
表示できるようにするためにはF8等を使いコマンドとして必要があります。。
|
10
|
+
|
7
11
|
頂いたコードを参考に
|
8
12
|
書き直してみました。
|
9
13
|
|
10
14
|
既存のインテリセンスに追加 したかったのですが
|
11
15
|
`TabExpansion` では方法が分からなかったため `TabExpansion2`を書き換えました。
|
12
16
|
|
13
|
-
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られます。
|
17
|
+
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られま~~す。~~ぜん....
|
18
|
+
原因追求中です。
|
14
19
|
|
15
20
|
ps1 か psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
|
16
21
|
```powershell
|
10
ベストアンサー後
title
CHANGED
File without changes
|
body
CHANGED
@@ -13,15 +13,13 @@
|
|
13
13
|
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られます。
|
14
14
|
|
15
15
|
ps1 か psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
|
16
|
-
|
17
|
-
スクリプトで実行すると一部コレクションが読み取り専用になり
|
18
|
-
動作不良を起こすことが分かったので修正中です。
|
19
16
|
```powershell
|
20
|
-
|
17
|
+
文字数超過で載せられませんでした
|
18
|
+
下記記載の「インテリセンス 追加コード」へお願い致します。
|
21
19
|
```
|
20
|
+
[インテリセンス 追加コード](https://sites.google.com/view/kmkzyozora/Home/Program/PowerShell/ReuseScript/Ex_TabExpansion2_psm1)
|
22
21
|
|
23
22
|
|
24
|
-
|
25
23
|
### 途中経過 2019.03.06時点
|
26
24
|
一先ずpublicなクラスを継承して
|
27
25
|
NameSpace を利用する 手段は見つけました。
|
9
ベストアンサー後
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
### ベストアンサー後
|
2
2
|
欠点が見つかりました
|
3
|
-
クラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。
|
3
|
+
インテリセンスに表示させたいクラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。
|
4
4
|
表示できるようにするためにはF8等を使いコマンドとして必要があります。
|
5
5
|
現在 対策を探しています。
|
6
6
|
|
@@ -17,6 +17,7 @@
|
|
17
17
|
スクリプトで実行すると一部コレクションが読み取り専用になり
|
18
18
|
動作不良を起こすことが分かったので修正中です。
|
19
19
|
```powershell
|
20
|
+
|
20
21
|
```
|
21
22
|
|
22
23
|
|
8
ベストアンサー後
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,26 @@
|
|
1
1
|
### ベストアンサー後
|
2
|
+
欠点が見つかりました
|
3
|
+
クラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。
|
4
|
+
表示できるようにするためにはF8等を使いコマンドとして必要があります。
|
5
|
+
現在 対策を探しています。
|
6
|
+
|
2
7
|
頂いたコードを参考に
|
3
|
-
|
8
|
+
書き直してみました。
|
4
9
|
|
10
|
+
既存のインテリセンスに追加 したかったのですが
|
11
|
+
`TabExpansion` では方法が分からなかったため `TabExpansion2`を書き換えました。
|
12
|
+
|
13
|
+
定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られます。
|
14
|
+
|
15
|
+
ps1 か psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
|
16
|
+
|
17
|
+
スクリプトで実行すると一部コレクションが読み取り専用になり
|
18
|
+
動作不良を起こすことが分かったので修正中です。
|
19
|
+
```powershell
|
20
|
+
```
|
21
|
+
|
22
|
+
|
23
|
+
|
5
24
|
### 途中経過 2019.03.06時点
|
6
25
|
一先ずpublicなクラスを継承して
|
7
26
|
NameSpace を利用する 手段は見つけました。
|
7
ベストアンサー後
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
###
|
1
|
+
### ベストアンサー後
|
2
|
+
頂いたコードを参考に
|
3
|
+
自分なりにまとめたら載せます。
|
4
|
+
|
5
|
+
### 途中経過 2019.03.06時点
|
2
6
|
一先ずpublicなクラスを継承して
|
3
7
|
NameSpace を利用する 手段は見つけました。
|
4
8
|
一度実行すればタイプ指定時のインテリセンスも使えました。
|
6
補足情報の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -119,7 +119,7 @@
|
|
119
119
|
|
120
120
|
### 補足情報(FW/ツールのバージョンなど)
|
121
121
|
Win10
|
122
|
-
|
122
|
+
powerShell_ISE Ver V5
|
123
123
|
|
124
124
|
どのパソコンで作業、実行 するのか決まっていないのと
|
125
125
|
毎回全てのクラスを使うわけではない(一つのプロジェクトのみでしか利用しないのもある)ので
|
5
追記の訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
### 途中経過
|
2
2
|
一先ずpublicなクラスを継承して
|
3
|
-
NameSpace
|
3
|
+
NameSpace を利用する 手段は見つけました。
|
4
|
-
|
4
|
+
一度実行すればタイプ指定時のインテリセンスも使えました。
|
5
5
|
```powershell
|
6
|
+
Using Module .\class.psm1
|
6
7
|
[System.Reflection.AssemblyName] $AssemblyName = "assemblyBuilder"
|
7
8
|
|
8
9
|
$appDomain = [AppDomain]::CurrentDomain
|
@@ -12,24 +13,32 @@
|
|
12
13
|
)
|
13
14
|
$moduleBuilder = $assemblyBuilder.DefineDynamicModule($AssemblyName.Name)
|
14
15
|
|
15
|
-
$TypeBuilder = $moduleBuilder.DefineType("kmkz.Form",[System.Reflection.TypeAttributes]::Public,[System.Windows.Forms.Form])
|
16
|
+
$TypeBuilder = $moduleBuilder.DefineType("kmkz.Form", [System.Reflection.TypeAttributes]::Public, [System.Windows.Forms.Form])
|
16
17
|
|
17
18
|
$TypeBuilder.CreateType() > $null
|
19
|
+
|
20
|
+
$TypeBuilder.Assembly.GetTypes().NameSpace | sort -Unique | foreach { Write-Host "ネームスペース : $_" }
|
21
|
+
Write-Host "フルネーム : $($Form.GetType().FullName)"
|
22
|
+
|
18
23
|
$Form = [kmkz.Form]::new()
|
24
|
+
$Form.ShowDialog() > $null
|
19
25
|
|
26
|
+
```
|
27
|
+
ですがメソッド等の追加の仕方も分からないですし...
|
28
|
+
自分で作ったクラスも継承できません
|
20
|
-
|
29
|
+
`[System.Reflection.TypeAttributes]::Public, [System.Windows.Forms.Form])`の`[System.Windows.Forms.Form]`を自分で定義したクラスにすると
|
21
30
|
|
22
|
-
$Form.ShowDialog()
|
23
31
|
```
|
24
|
-
|
32
|
+
"3" 個の引数を指定して "DefineType" を呼び出し中に例外が発生しました: "回収不可能アセンブリから回収可能アセンブリを参照することはできません。"
|
33
|
+
```
|
25
|
-
|
34
|
+
っとエラーになります.....
|
26
|
-
もしできれば普通にクラスを書いた後に何も変更せず継承させて
|
27
|
-
|
35
|
+
**回収不可能アセンブリ** も **回収可能アセンブリ** も調べても何のことだか全くわかりません。
|
28
36
|
|
37
|
+
もし自作のクラスが継承できればそれで 一先ず目標は達成できるのですが...
|
38
|
+
|
29
39
|
そもそも ダイナミックモジュールじゃなくて普通のモジュールでは出来ないのでしょうか....?
|
30
40
|
|
31
41
|
|
32
|
-
|
33
42
|
### 前提・実現したいこと
|
34
43
|
|
35
44
|
ざっくりしたタイトルですみません。
|
4
間違い修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,9 +16,9 @@
|
|
16
16
|
|
17
17
|
$TypeBuilder.CreateType() > $null
|
18
18
|
$Form = [kmkz.Form]::new()
|
19
|
-
$Form.GetType().FullName
|
20
|
-
Write-Host "$($test.ToString())"
|
21
19
|
|
20
|
+
Write-Host "$($Form.GetType().FullName)"
|
21
|
+
|
22
22
|
$Form.ShowDialog()
|
23
23
|
```
|
24
24
|
ですがメソッド等のの追加の仕方も分からないですし...
|
3
途中経過
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,3 +1,35 @@
|
|
1
|
+
### 途中経過
|
2
|
+
一先ずpublicなクラスを継承して
|
3
|
+
NameSpace ? なのかよくわかりませんが
|
4
|
+
クラスをカンマ区切りで指定できる手段は見つけました。
|
5
|
+
```powershell
|
6
|
+
[System.Reflection.AssemblyName] $AssemblyName = "assemblyBuilder"
|
7
|
+
|
8
|
+
$appDomain = [AppDomain]::CurrentDomain
|
9
|
+
$assemblyBuilder = $appDomain.DefineDynamicAssembly(
|
10
|
+
$AssemblyName,
|
11
|
+
[System.Reflection.Emit.AssemblyBuilderAccess]::Run
|
12
|
+
)
|
13
|
+
$moduleBuilder = $assemblyBuilder.DefineDynamicModule($AssemblyName.Name)
|
14
|
+
|
15
|
+
$TypeBuilder = $moduleBuilder.DefineType("kmkz.Form",[System.Reflection.TypeAttributes]::Public,[System.Windows.Forms.Form])
|
16
|
+
|
17
|
+
$TypeBuilder.CreateType() > $null
|
18
|
+
$Form = [kmkz.Form]::new()
|
19
|
+
$Form.GetType().FullName
|
20
|
+
Write-Host "$($test.ToString())"
|
21
|
+
|
22
|
+
$Form.ShowDialog()
|
23
|
+
```
|
24
|
+
ですがメソッド等のの追加の仕方も分からないですし...
|
25
|
+
自分で作ったクラスも継承できませんし.....
|
26
|
+
もしできれば普通にクラスを書いた後に何も変更せず継承させて
|
27
|
+
無理やりインテリセンスを使えるようにしてしまおうかと思ったのですが...
|
28
|
+
|
29
|
+
そもそも ダイナミックモジュールじゃなくて普通のモジュールでは出来ないのでしょうか....?
|
30
|
+
|
31
|
+
|
32
|
+
|
1
33
|
### 前提・実現したいこと
|
2
34
|
|
3
35
|
ざっくりしたタイトルですみません。
|
@@ -44,7 +76,6 @@
|
|
44
76
|
# Import-Module -Name .\Class.psm1 <Using Module だけで動作したため不要>
|
45
77
|
|
46
78
|
$test = [te2st]::new()
|
47
|
-
$test.ToString()
|
48
79
|
```
|
49
80
|
結果は良好 staticメンバ も instanceメンバ もしっかりインテリセンスが使えました。
|
50
81
|
これで殆ど 目的は達成できているのですが `[te2st]`の入力時にインテリセンスが使えないので
|
2
経緯の追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -12,7 +12,8 @@
|
|
12
12
|
そうしてずっと逃げてきたのです。
|
13
13
|
|
14
14
|
そんな中 [とある質問](https://teratail.com/questions/172043)での**Zuishin様**からの回答をきっかけに クラスの継承を 使うようになりました。
|
15
|
+
ですが、自分で定義したクラスをさらに継承(多重継承?)しようとした場合
|
15
|
-
|
16
|
+
今まで使っていた 変数に格納したクラスでは 継承が出来ず 再びインテリセンスが使えない状態に陥ってしまいました。
|
16
17
|
「どうせインテリセンスが使えないのなら全て諦めてしまおうと」そう思ったのですが、
|
17
18
|
|
18
19
|
[Formに関する質問](https://teratail.com/questions/168391)をしたときに**imihito様**に頂いたコードの中で**モジュール**なるものが使われていて 見よう見まねで書き変えて実行したとき 何かの要因でたまたま上手く実行できず [追加の質問](https://teratail.com/questions/169239)をしたのですが その中で **Imihito様**が
|
1
補足
title
CHANGED
File without changes
|
body
CHANGED
@@ -78,4 +78,8 @@
|
|
78
78
|
|
79
79
|
### 補足情報(FW/ツールのバージョンなど)
|
80
80
|
Win10
|
81
|
-
powerShell Ver V5
|
81
|
+
powerShell Ver V5
|
82
|
+
|
83
|
+
どのパソコンで作業、実行 するのか決まっていないのと
|
84
|
+
毎回全てのクラスを使うわけではない(一つのプロジェクトのみでしか利用しないのもある)ので
|
85
|
+
プロファイル等 設定済みPCでしか利用できない方法は使えません。
|