Это происходит просто, если вы пытаетесь рассматривать массив как строку:
$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
}
Если это уведомление появляется где-то, чего вы не ожидаете, это означает переменную, которую вы мысль - это строка, на самом деле это массив. Это означает, что у вас есть ошибка в коде, которая делает эту переменную массивом вместо ожидаемой строки.
Если что-то вставляется в 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()
) или поместить файл в некоторое известное местоположение, возможно на основе переменной среды, которая установлена.
У Вас есть опция встраивания ресурса к этому 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());
}
Если вы ищете физическое место, где ваша GACed DLL сохраняется в файловой системе, попробуйте следующее: начало -> запустить -> c: \ windows \ assembly \ gac Если вы не найдете там папку, связанную с вашей DLL, вы можете создать папку «Вверх» в проводнике Windows, чтобы отобразить все в c: \ windows \ assembly в виде структур папок. Затем вы можете искать свою DLL в GAC_MSIL или в любой другой папке ....
Ура, Шри