Путь DLL установлен на GAC

Примечание: Преобразование в строковое преобразование

Это происходит просто, если вы пытаетесь рассматривать массив как строку:

$arr = array('foo', 'bar');

echo $arr;  // Notice: Array to string conversion
$str = 'Something, ' . $arr;  // Notice: Array to string conversion

Массив не может быть просто echo 'd или конкатенируется с строкой, потому что результат не определен. PHP будет использовать строку «Array» вместо массива и вызвать уведомление, чтобы указать, что это, вероятно, не то, что было предназначено, и что вы должны проверять свой код здесь. Вероятно, вы захотите что-то вроде этого:

echo $arr[0];  // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar

Или зациклируйте массив:

foreach($arr as $key => $value) {
    echo "array $key = $value";
    // displays first: array 0 = foo
    // displays next:  array 1 = bar
}

Если это уведомление появляется где-то, чего вы не ожидаете, это означает переменную, которую вы мысль - это строка, на самом деле это массив. Это означает, что у вас есть ошибка в коде, которая делает эту переменную массивом вместо ожидаемой строки.

24
задан jww 15 June 2019 в 21:17
поделиться

3 ответа

Если что-то вставляется в GAC, он на самом деле копируется в место под %WINDIR %\assembly, как

C:\WINDOWS\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll

я предполагаю, что Вы видите что-то как этот при проверке Местоположения рассматриваемого блока, когда он установлен в GAC. Это на самом деле корректно. (В.NET 1.1 была "Кодовая база", перечисленная, когда Вы посмотрели на свойства блока GAC, но это было только, чтобы показать Вам, где исходный файл был расположен при выполнении gacutil - это на самом деле не указало на то, что будет загружено.) Можно читать [еще 113] об этом здесь .

, Короче говоря, Вы не можете быть в состоянии сделать то, что Вы хотите сделать. Вместо того, чтобы смотреть относительно некоторого блока это загружается (Assembly.GetExecutingAssembly()), Вы могли бы хотеть переключить поведение, чтобы посмотреть относительно блока первичного приложения (Assembly.GetEntryAssembly()) или поместить файл в некоторое известное местоположение, возможно на основе переменной среды, которая установлена.

22
ответ дан Travis Illig 29 November 2019 в 00:04
поделиться

У Вас есть опция встраивания ресурса к этому DLL? Тем путем действительно не имеет значения, где DLL расположен на диске, потому что XML-файл будет следовать за ним. Можно тогда сделать что-то вроде этого:

Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyProject.MyXmlFile.xml");
XmlDocument d = new XmlDocument();
using (StreamReader r = new StreamReader(s))
{
    d.LoadXml(r.ReadToEnd());
}
3
ответ дан abatishchev 29 November 2019 в 00:04
поделиться

Если вы ищете физическое место, где ваша GACed DLL сохраняется в файловой системе, попробуйте следующее: начало -> запустить -> c: \ windows \ assembly \ gac Если вы не найдете там папку, связанную с вашей DLL, вы можете создать папку «Вверх» в проводнике Windows, чтобы отобразить все в c: \ windows \ assembly в виде структур папок. Затем вы можете искать свою DLL в GAC_MSIL или в любой другой папке ....

Ура, Шри

2
ответ дан 29 November 2019 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: