Совместное использование кода между сайтом / проектом веб-приложения и Script#/ScriptSharp
Я добавил проект Script# в свой проект веб-сайта и создал небольшую примерную библиотеку с двумя классами.
Теперь я хочу использовать эти классы из кода сайта. В этом случае я создал простое дерево объектов и сериализовал его в JSON (который затем получал бы код на стороне клиента).
Я попытался добавить ссылку на проект Script#. Он хорошо компилируется, но при запуске выдает ошибку:
- Сборка не найдена
- Версия исполнения отличается
Можно ли даже поделиться кодом между Script# и обычным C#?
Я использую Script# 0.6 с VS 2010 и.NET 3.5 (оба проекта).
3 ответа
Код полностью разделяемый. Я полагаюсь на это для повторного использования классов данных, отправленных через веб-сервис.
Что вы можете сделать, это:
- Настройте один файл c-sharp с именем SharedTypes.cs в папке "Shared".
- Затем для каждого из ваших проектов щелкните правой кнопкой мыши узел проекта, выберите "Добавить" -> "Существующий элемент". Найдите SharedTypes.cs, затем нажмите стрелку вниз рядом с "Добавить" и выберите "Добавить как ссылку".
- Создайте свои общие классы там.
- Добавьте символ препроцессора, например, "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.