質問するログイン新規登録

質問編集履歴

13

ベストアンサー後

2019/03/08 01:45

投稿

kmyzr
kmyzr

スコア305

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
- ps1 か psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
13
+ psm1 で保存し、ISEでの利用時には F8 等で 明示的に そのスクリプトを実行する必要があります。
26
14
  ```powershell
27
15
  文字数超過で載せられませんでした
28
16
  下記記載の「インテリセンス 追加コード」へお願い致します。

12

ベストアンサー後

2019/03/08 01:45

投稿

kmyzr
kmyzr

スコア305

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

ベストアンサー後

2019/03/08 01:28

投稿

kmyzr
kmyzr

スコア305

title CHANGED
File without changes
body CHANGED
@@ -1,16 +1,21 @@
1
1
  ### ベストアンサー後
2
- 欠点が見つかりました
2
+ ~~欠点が見つかりました
3
- インテリセンスに表示させたいクラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。
3
+ インテリセンスに表示させたいクラスの定義がスクリプトとして実行されたこの方法ではインテリセンスに表示されませんでした。~~
4
+ 一先ず出来たのですが、
5
+ 定義した全てのクラス(Enum)が見たいときは `['まで打って Ctrl + Space で見られるようにしていたのに
4
- 表示でるようにするめにはF8等を使いコマンドとして必要がありま
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

ベストアンサー後

2019/03/08 01:21

投稿

kmyzr
kmyzr

スコア305

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

ベストアンサー後

2019/03/08 00:41

投稿

kmyzr
kmyzr

スコア305

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

ベストアンサー後

2019/03/07 10:43

投稿

kmyzr
kmyzr

スコア305

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

ベストアンサー後

2019/03/07 10:41

投稿

kmyzr
kmyzr

スコア305

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

補足情報の修正

2019/03/07 02:20

投稿

kmyzr
kmyzr

スコア305

title CHANGED
File without changes
body CHANGED
@@ -119,7 +119,7 @@
119
119
 
120
120
  ### 補足情報(FW/ツールのバージョンなど)
121
121
  Win10
122
- powerShell Ver V5
122
+ powerShell_ISE Ver V5
123
123
 
124
124
  どのパソコンで作業、実行 するのか決まっていないのと
125
125
  毎回全てのクラスを使うわけではない(一つのプロジェクトのみでしか利用しないのもある)ので

5

追記の訂正

2019/03/06 05:47

投稿

kmyzr
kmyzr

スコア305

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
- Write-Host "$($Form.GetType().FullName)"
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

間違い修正

2019/03/06 05:45

投稿

kmyzr
kmyzr

スコア305

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

途中経過

2019/03/06 04:05

投稿

kmyzr
kmyzr

スコア305

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

経緯の追記

2019/03/05 08:59

投稿

kmyzr
kmyzr

スコア305

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

補足

2019/03/02 02:37

投稿

kmyzr
kmyzr

スコア305

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でしか利用できない方法は使えません。