Совместное использование кода между сайтом / проектом веб-приложения и Script#/ScriptSharp

Я добавил проект Script# в свой проект веб-сайта и создал небольшую примерную библиотеку с двумя классами.

Теперь я хочу использовать эти классы из кода сайта. В этом случае я создал простое дерево объектов и сериализовал его в JSON (который затем получал бы код на стороне клиента).

Я попытался добавить ссылку на проект Script#. Он хорошо компилируется, но при запуске выдает ошибку:

  • Сборка не найдена
  • Версия исполнения отличается

Можно ли даже поделиться кодом между Script# и обычным C#?

Я использую Script# 0.6 с VS 2010 и.NET 3.5 (оба проекта).

3 ответа

Решение

Код полностью разделяемый. Я полагаюсь на это для повторного использования классов данных, отправленных через веб-сервис.

Что вы можете сделать, это:

  1. Настройте один файл c-sharp с именем SharedTypes.cs в папке "Shared".
  2. Затем для каждого из ваших проектов щелкните правой кнопкой мыши узел проекта, выберите "Добавить" -> "Существующий элемент". Найдите SharedTypes.cs, затем нажмите стрелку вниз рядом с "Добавить" и выберите "Добавить как ссылку".
  3. Создайте свои общие классы там.
  4. Добавьте символ препроцессора, например, "WEBSERVER", в ваш проект на стороне сервера. Это позволяет вам иметь немного различную функциональность между проектами, если это необходимо.

Пример:

public class MyDataPacket
{
    public int UserId;
    public string SomeData1;
    public int SomeData2;

#if SCRIPTSHARP
    public MyDataPacket(MyOtherClientSideClass arg)
    {
        // init
    }
#endif

#if WEBSERVER
    public MyDataPacket(MyOtherServerSideClass arg)
    {
        // init
    }
#endif
}

РЕДАКТИРОВАТЬ: Script # теперь включает в себя символ по умолчанию SCRIPTSHARPс более ясным намерением, чем !WEBSERVER,

Один из возможных способов поделиться кодом между script # и C# - добавить ссылку на исходный файл. В VS вы можете добавить исходный файл в проект как ссылку, когда добавляете его в проект (файл не копируется, а вместо этого добавляет ссылку на исходный файл). В проекте C# этот же файл добавляется обычным способом. В результате, когда вы меняете код, эти изменения будут отражены в обоих проектах. Когда файл скомпилирован, тот, что в проекте C#, будет скомпилирован с помощью компилятора C#, а тот, что в #, будет скомпилирован с помощью компилятора script#.

Конечно, вы должны быть осторожны, чтобы использовать только те функции, которые являются общими для C# и script#. Это ограничивает возможное использование, но, возможно, структуры данных могут быть разделены таким образом.

Можно ли даже поделиться кодом между Script# и обычным C#?

Это не совсем возможно. Ваш проект должен быть в C# 2.0 и должен соответствовать ограничениям Script#. Вместо этого вы можете настроить автомаппер.

Для меня было проще настроить вторую модель домена в Script#, у меня не было такой большой модели домена для начала.

Имейте в виду, что Script# просто компилируется в Javascript.

Другие вопросы по тегам