2015-03-10 4 views
-1

Я пытаюсь использовать словарь в блоке сценария C#, встроенном в документ XSLT1.0. Когда я пытаюсь добавить ссылку на System.Collections.Generic или System.Core, я получаю «файл метаданных, который не найден для сборки ...» При добавлении ссылки в «mscorlib», похоже более старая версия ссылается (?), так как я получаю сообщение об ошибке при попытке использовать Dictionary.Keys.Contains() ('не содержит метод Contains). Излишне говорить, что этот код был успешно протестирован за пределами xslt. Как я могу добавить правильную ссылку на FW 3.5/4? Tnx!добавить ссылку на сборку в блоке сценария XSLT C#

+0

Обмен критическими частями исходного кода может помочь другим разобраться в вашей проблеме. Также проверьте это: [как задать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask) –

ответ

0

Dictionary.Keys.Contains определяется в System.Linq пространстве имен, и Linq определяется в сборке System.Core, так что вам нужно право msxsl:assembly и msxsl:using элементы для них. Следующие работы для меня в VS2013 XSLT отладчик:

<msxsl:script implements-prefix="my" language="csharp"> 
    <msxsl:assembly name="System.Core" /> 
    <msxsl:using namespace="System.Linq" /> 
    <msxsl:using namespace="System.Collections.Generic" /> 

    <![CDATA[ 
    public bool myFunc() 
    { 
     var d = new Dictionary<string, string>(); 
     d.Add("Hello", "Goodbye"); 
     return d.Keys.Contains("Hello"); 
    }  
    ]]> 
</msxsl:script> 

Это по-прежнему оставляет вопрос о том, почему вы используете Dictionary.Keys.Contains, когда вы могли бы использовать Dictionary.ContainsKey, который был в .NET, начиная с 2.0 и не нуждается в какой-либо дополнительные сборки или ссылки на пространство имен.

+0

Thanks.Using ContainsKey действительно решил проблему «нет», однако я все еще не могу ссылка System.Linq, Collections.Generic или Core. Есть идеи? VS2010 btw –

Смежные вопросы