Возможности C # .NET 3.0 / 3.5 в 2.0 с использованием Visual Studio 2008

EDIT

На самом деле, я просто понял, что «ошибка», о которой вы говорите, включает эхо / распечатку. Вот проблема.

Вы print ing (echo ing) ошибка строки ПРЯМО СЛЕДУЕТ В выходной буфер (который отправляет HTML в браузер, когда вы закончите выполнение всего вашего кода) , echo() и print() отправляют то, что вы эхом / печатаете прямо, если только оно не находится в блоке output_buffer (я не буду путать вас с подробностями об этом).

Итак, вы управляя вашим обычным html / текстовым выходом таким образом, чтобы НЕ print содержимое страницы выводилось в выходной буфер, но в этом случае вы используете echo, который отправляет строковые данные непосредственно в буфер AT THAT MOMENT .

Например:

Ваша проблема в простом примере

";
$mystr .= "

Hello World

"; echo ""; echo $mystr; ?>

Который дал бы мне вывод в браузер :

Hello World

Я храню строковые данные, но echo в блоке HEAD до того, как я echo выложил другие html-данные.

Что мне нужно сделать:

";
$mystr .= "";
$mystr .= "

Hello World

"; echo $mystr; ?>

Который дал бы мне вывод в браузер:

Hello World

Я сохраняю вывод строки (ваша ошибка в этом случае), пока мне не нужно будет выводить ее позже. Это то, что вам нужно знать и выполнить в вашем коде.


Я бы исследовал error_reporting(0) / display_errors, error_get_last и set_error_handler.

http://www.php.net/manual/en/function.error-reporting.php

http://www.php.net/manual /en/errorfunc.configuration.php#ini.display-errors

http://php.net/manual/en/function.error-get-last.php

http://www.php.net/manual/en/function.set-error-handler.php

Чтобы вы может прекратить немедленно отправлять все ошибки в выходной буфер (поэтому он находится в верхней части страницы), а затем захватывать, хранить и представлять ваши ошибки.

error_reporting(0);

set_error_handler('phpLogError');

function phpLogError() {
    $error = error_get_last();

    if ($error['type'] == 1) {
        //do your stuff    
    } 
}

function phpGetLoggedErrors() {
    // return your prettified html errors
}

Или, другими словами .. .

php_error_handle.php

$error";
    } 
}

function phpGetLoggedErrors() {
    global $_logged_php_errors;

    return "
  1. ".implode('
  2. ',$_logged_php_errors)."
"; } ?>

other.php

Просто убедитесь, что this require_once происходит в первой строке кода.

13
задан Russell Myers 6 October 2008 в 12:10
поделиться

7 ответов

Можно использовать любую новую функцию C# 3.0, которая обрабатывается компилятором путем испускания совместимого с 2.0 IL и не ссылается ни на один из новых 3,5 блоков:

  • Лямбды (используемый в качестве Func<..>, не Expression<Func<..>>)
  • Дополнительные методы (путем объявления пустой Системы. Время выполнения. CompilerServices. ExtensionAttribute)
  • свойства Automatic
  • Объектные Инициализаторы
  • Инициализаторы Набора
  • LINQ к Объектам (путем реализации IEnumerable< T> дополнительные методы, см. LinqBridge)
16
ответ дан Lucas 6 October 2008 в 12:10
поделиться

В значительной степени все! Daniel Moth покрывает это здесь и здесь . Та единственная листовая поддержка во время выполнения: LINQ к объектам обеспечивается LINQBridge - который оставляет просто большие API как поддержка Выражения и инструменты как LINQ к SQL. Они являются слишком большими, чтобы быть обоснованно портированными назад к.NET 2.0, таким образом, я использовал бы.NET 3.5 для них.

5
ответ дан Marc Gravell 6 October 2008 в 12:10
поделиться

Была предыдущая дискуссия о чем-то подобном, которое можно также хотеть считать также:

Платформа.NET Предназначения 3.5, Используя.NET 2.0 Времени выполнения. Протесты?

2
ответ дан Community 6 October 2008 в 12:10
поделиться

Для определения дополнительных методов необходимо будет предоставить следующий класс при предназначении для.NET 2.0:

namespace System.Runtime.CompilerServices {
  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
    sealed class ExtensionAttribute : Attribute { }
}
3
ответ дан Curt Hagenlocher 6 October 2008 в 12:10
поделиться

Я покрываю это в статья о моем сайте .

Почти все функции C# 3.0 доступны при предназначении для.NET 2.0. Для дополнительных методов необходимо определить дополнительный атрибут. Деревья выражений не доступны вообще. Поддержка выражения запроса основана на переводе, сопровождаемом "нормальными" правилами C#, таким образом, Вам будет нужно что-то для обеспечения Выбора, Где и т.д. методы. LINQBridge является фактическим стандартом "LINQ к Объектам в.NET 2,0" реализации. Можно хотеть объявить, что делегаты в Func и Action семьи делегата облегчают работать с лямбда-выражениями - и затем удалять их, если/когда Вы перемещаетесь в.NET 3.5

5
ответ дан Jon Skeet 6 October 2008 в 12:10
поделиться

Лямбды & Дополнительные методы обрабатываются просто компилятором и могут использоваться с платформой.Net 2.0.

1
ответ дан James Curran 6 October 2008 в 12:10
поделиться
  • 1
    You' приветствие ре, @Christoph_J. Кроме того, несколько мыслей. Сначала я думаю в этом случае, цикличное выполнение могло бы быть лучше, потому что оно позволяет Вам использовать в своих интересах данные table' s изменяют ссылкой := оператор. (Я могу выполнить некоторые сравнительные тесты позже для проверки этого и добавлю результаты к моему ответу, если я делаю). Во-вторых, для исследования substitute и др. Вы могли бы хотеть поместить browser() вызов в j, как это: for(i in ......) { DT[ , browser()]}. Тогда можно ввести по абсолютному адресу вокруг ' внутри of' DT, испытывая разные вещи (как quote(i), eval(quote(i), as.symbol(eval(quote(i)), eval(parse(text=i)) и т.д.) – Josh O'Brien 5 December 2011 в 08:57

Можно использовать версию Mono Системы. Ядро, которое полностью поддерживает LINQ & Деревья выражений. Я скомпилировал его источник против .net 2.0, и теперь я могу использовать его в своих .net2.0 проектах. Здорово для проектов, который должен быть развернут на win2k, где .net3.5 не доступен.

2
ответ дан Omer Mor 6 October 2008 в 23:10
поделиться
  • 1
    Спасибо @Josh O' Brien, который делает точно, что я искал (хотя я продумываю то цикличное выполнение, плохая идея во-первых, видит мое редактирование [очевидно, that' s проблема моего вопроса, не Ваш ответ;-)]). Так или иначе теперь я попытаюсь обернуть голову [приблизительно 110], eval, quote, deparse, и т.д... Я споткнулся через них пару раз, и я думаю, что они довольно мощны в создании большого количества динамичного материала (как в Вашем ответе), но у меня все еще есть проблемы при понимании их полной красоты... еще раз спасибо за показ мне путь, хотя! – Christoph_J 5 December 2011 в 08:37