質問編集履歴

1

ベストアンサー後のまとめ

2019/02/20 02:36

投稿

kamikazelight
kamikazelight

スコア305

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,129 @@
1
+ ### ベストアンサー後のまとめ
2
+
3
+ **原因**
4
+
5
+ - コンソールとISEで最初に読み込まれているアセンブリが異なる
6
+
7
+ - `Using NameSpace` では アセンブリのロードは行われない
8
+
9
+ - スクリプトファイルが同じ場合`Add-Type`よりも`Class`等の定義が優先して読み込まれる
10
+
11
+ - `Class`等の定義時 利用されている 型 等が読み込まれていないとエラーになる
12
+
13
+
14
+
15
+ **対策**
16
+
17
+ - 最初に実行するスクリプトファイルで極力Add-Typeは済ませておく
18
+
19
+ - 最初に実行するスクリプトファイルは(コンソールだと)Add-Typeが必要な型などは使わない(使えない)
20
+
21
+
22
+
23
+
24
+
25
+ **コンソールだとロードされていないアセンブリの一括ロード**
26
+
27
+ 私の環境だと0.5~2秒ほどでそこまで時間はかからない
28
+
29
+ ```powershell
30
+
31
+ Using NameSpace System.IO
32
+
33
+
34
+
35
+ $asms = foreach ($asm in [System.AppDomain]::CurrentDomain.GetAssemblies()) {
36
+
37
+ $asm | ?{$asm.Location -ne $null} | Select-Object -Property @{N='Assembly';E={$asm.GetName().Name}}, Location -Unique
38
+
39
+ }
40
+
41
+
42
+
43
+ $asmsFile = "ISE_LoadAssemblies.csv"
44
+
45
+
46
+
47
+ if ($Host.Name -eq "Windows PowerShell ISE Host")
48
+
49
+ {
50
+
51
+ $asms | Export-Csv -Path ".$asmsFile" -NoTypeInformation
52
+
53
+ Write-host "Assembly write complete"
54
+
55
+ }
56
+
57
+ else
58
+
59
+ {
60
+
61
+ if (-not (Test-Path -Path ".$asmsFile"))
62
+
63
+ {
64
+
65
+ Write-Host "ISEで実行されたことがありません。"
66
+
67
+ return
68
+
69
+ }
70
+
71
+ $ISEAssembly = Import-Csv -Path ".$asmsFile"
72
+
73
+
74
+
75
+ $LoadedAssembly = $asms | foreach { $_.Location }
76
+
77
+
78
+
79
+ $Diff = $ISEAssembly | ?{ -not $LoadedAssembly.Contains($_.Location) }
80
+
81
+
82
+
83
+ $Error.Clear()
84
+
85
+ $Diff | ?{[Path]::GetExtension($_.Location) -eq ".dll"} | Foreach {
86
+
87
+ $Path = $_.Location
88
+
89
+ try
90
+
91
+ {
92
+
93
+ Add-Type -Path $Path -ErrorAction SilentlyContinue
94
+
95
+ }
96
+
97
+ catch
98
+
99
+ {
100
+
101
+ Write-Host "失敗 : アセンブリ名 = $($_.Assembly) パス = $Path" -ForegroundColor Red
102
+
103
+ }
104
+
105
+ }
106
+
107
+ if ($Error.count -ne 0)
108
+
109
+ {
110
+
111
+ Write-Host "失敗数 : $($Error.count)"
112
+
113
+ }
114
+
115
+
116
+
117
+ Write-host "Assembly loading completed"
118
+
119
+ }
120
+
121
+ ```
122
+
123
+
124
+
125
+
126
+
1
127
  ### 前提・実現したいこと
2
128
 
3
129