我收到System.IO.FileNotFoundException
,其中指出找不到System.Windows.Forms.dll
,虽然我引用了程序集(当然也删除并重新引用了它)。
我必须加载外部*.resx
文件并将它们写入sqlite-db
这是抛出异常的代码部分:
private void LoadResources()
{
string[] resources = Directory.GetFiles(Settings.Default.DefaultFilePath, "*.resx", SearchOption.AllDirectories);
foreach (var resource in resources)
{
var resReader = new ResXResourceReader(resource);
var dict = resReader.GetEnumerator(); // Exception raised at 29th iteration
while (dict.MoveNext())
{
if (dict.Key.GetType() != typeof (string))
continue;
// unrelevant stuff...
但是,异常总是在foreach
- 循环的同一次迭代(第29次)中引发(因此,不是直接),而不依赖于底层文件。
修改:
StackTrace :
System.IO.FileNotFoundException occurred
FileName=System.Windows.Forms
FusionLog==== Zustandsinformationen vor Bindung ===
LOG: DisplayName = System.Windows.Forms
(Partial)
WRN: Für eine Assembly wurden partielle Bindungsinformationen bereitgestellt:
WRN: Assemblyname: System.Windows.Forms | Domänen-ID: 1
WRN: Eine partielle Bindung tritt auf, wenn nur ein Teil des Assemblyanzeigenamens bereitgestellt wird.
WRN: Dies führt möglicherweise dazu, dass die Sammelmappe eine falsche Assembly lädt.
WRN: Geben Sie die Textidentität der Assembly mit allen Einzelheiten an.
WRN: Dazu gehören der einfache Name, die Version und Kultur und das öffentliche Schlüsseltoken.
WRN: Weitere Informationen und allgemeine Lösungen für dieses Problem finden Sie im Whitepaper unter "http://go.microsoft.com/fwlink/?LinkId=109270".
LOG: Appbase = file:///C:/Users/patrick/Documents/Visual Studio 2015/Projects/GitTranslationTool/CleanTranslationTool/CleanTranslationTool/bin/Debug/
LOG: Ursprünglicher PrivatePath = NULL
Aufruf von Assembly : System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
HResult=-2147024894
Message=Die Datei oder Assembly "System.Windows.Forms" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
Source=mscorlib
StackTrace:
bei System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
bei System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
InnerException:
关于一个例子:
private void LoadResources()
{
string[] resources = Directory.GetFiles(@"your\folder\with\resources", "*.resx", SearchOption.AllDirectories);
var counter = 0;
foreach (var resource in resources)
{
counter++;
var resReader = new ResXResourceReader(resource);
var dict = resReader.GetEnumerator();
while (dict.MoveNext())
{
if (dict.Key.GetType() != typeof (string))
continue;
Debug.WriteLine("{0}: {1}", dict.Key, dict.Value);
}
}
}