2012-04-27 15 views
5

Estoy creando un C# TBB. Tengo el código XML como se muestra a continuación.¿Cómo agregar dll de terceros en Tridion para C# TBB?

<content> 
    <ah>123</ah> 
    <ph>456</ph> 
    <body> 
    <sc>hi</sc> 
    <value>aa</value> 
    <value>bb</value> 
    <value>cc</value> 
    <value>dd</value> 
    <value>dd</value> 
    </body> 
    <body> 
    <sc>hello</sc> 
    <value>ee</value> 
    <value>ddff</value> 
    </body> 
</content> 

código C# TBB:

using (MemoryStream ms = new MemoryStream()) 
{ 
XmlTextWriter securboxXmlWriter = new XmlTextWriter(ms, new System.Text.UTF8Encoding(false)); 
securboxXmlWriter.Indentation = 4; 
securboxXmlWriter.Formatting = Formatting.Indented; 
securboxXmlWriter.WriteStartDocument(); 


securboxXmlWriter.WriteStartElement("component"); 

securboxXmlWriter.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
securboxXmlWriter.WriteAttributeString("xmlns", "http://www.w3.org/1999/xhtml"); 


securboxXmlWriter.WriteStartElement("content"); 
securboxXmlWriter.WriteStartElement("wire:wire"); 
securboxXmlWriter.WriteStartElement("wire:si"); 

securboxXmlWriter.WriteStartElement("wg:ah"); 
securboxXmlWriter.WriteElementString("text", package.GetValue("Component.ah")); 
securboxXmlWriter.WriteEndElement(); 

securboxXmlWriter.WriteStartElement("wg:ph"); 
securboxXmlWriter.WriteElementString("nlt", package.GetValue("Component.ph")); 
securboxXmlWriter.WriteEndElement(); 

securboxXmlWriter.WriteEndElement(); 
securboxXmlWriter.WriteEndElement(); 
securboxXmlWriter.WriteEndElement(); 
securboxXmlWriter.WriteEndElement(); 
securboxXmlWriter.WriteEndDocument(); 
securboxXmlWriter.Flush(); 
securboxXmlWriter.Close(); 



Item output = package.GetByName("Output"); 

if (output != null) 
{ 
package.Remove(output); 
} 

package.PushItem("Output", package.CreateStringItem(ContentType.Xml, Encoding.UTF8.GetString(ms.ToArray()))); 
} 

En la etiqueta de código XML "cuerpo" se ha producido varias veces. Necesito extraer el contenido de cada etiqueta "corporal". Para ese propósito estoy usando HTML agility pack. Para que funcione en C# TBB, ¿cómo agregar el archivo HTML agility pack al sistema Tridion? Y también proporcione un fragmento de código de muestra en html agility para recorrer las etiquetas del cuerpo.

Si HTML Agility no va a funcionar con C# TBB, sugiérame una forma de obtener el contenido de la etiqueta "body".

Gracias de antemano. Se agradece la respuesta temprana.

Respuesta

2

Creo que también puede usar ILMerge para combinar su DLL de terceros y su ensamblado TBB en uno solo que luego puede cargar en Tridion.

+2

Sí, puedes, y tengo buenas experiencias con eso.La única razón por la que no lo mencioné, es que la fusión de su propia DLL con una DLL de terceros podría conducir fácilmente a la infracción de los derechos de autor. Mientras esté seguro de que eso no va a ser un problema, podría usar ese enfoque también. Proporcionaré más detalles en una respuesta separada. – Quirijn

+0

No creo que haya un problema de derechos de autor. Los derechos de autor son sobre el código fuente. Si alguien no quiere que se use su IL, no debe enviar una DLL de ensamblaje, porque eso efectivamente envía la IL. Por supuesto, podría estar violando las condiciones de la licencia, pero ese es otro problema, y ​​nunca he visto una condición que prohíba esta técnica. En el lado negativo, usar ILMerge puede causar algunos efectos secundarios desagradables. Recientemente tuve un problema con una revisión de Tridion que AFAIK solo mostraría con un enfoque de ILMerge –

7

Deberá colocar la DLL de terceros en la Caché de ensamblados global (GAC). Para el código del paquete de agilidad de ejemplo, le sugiero que haga una pregunta por separado con un título más específico.

+3

Recuerde poner la DLL en el GAC en cada gestor de contenidos y máquina editor. – Quirijn

4

El uso de ILMerge le ahorra la molestia de instalar archivos DLL externos en el GAC. Solo asegúrate de no romper ninguna ley (de copyright) fusionando tu código con el de otra persona. Técnicamente, es lo suficientemente simple de hacer: una vez creada la DLL de plantilla, una acción posterior a la compilación la combina con las DLL externas que pueda necesitar y crea una nueva DLL. A continuación, puede subir esa DLL fusionada a Tridion.

Ejemplo: digamos que su proyecto de plantilla se llama 'MyTemplates' y tiene una dependencia en ExternalLibraryOne.dll y ExternalLibraryTwo.dll. Esto es lo que hace:

  • Descargar ILMerge de http://www.microsoft.com/en-us/download/details.aspx?id=17630 (es gratis)
  • Dentro de su solución de plantillas, cree una carpeta llamada Los productos de soluciones y copia ilmerge.exe allí.
  • Abrir las propiedades de su proyecto de plantillas y añadir el siguiente evento posterior a la generación:

    "$ (SolutionDir) Artículos Solution \ ILMerge"
    /lib:"C:\Windows\Microsoft.NET\Framework \ v4.0.30319 " /t: dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:"$(TargetDir)$(ProjectName).merged.dll" "$ (TargetDir) ExternalLibraryOne.dll" "$ (TargetDir) ExternalLibraryTwo.dll" "$ (targetPath)"

  • Construir su plantilla proyecto. La carpeta de salida (bin/Debug o bin/Release) ahora contendrá un archivo llamado MyTemplates.merged.dll. Puede subir esto a Tridion usando TcmUploadAssembly.

Esto supone que está utilizando .NET 4, por supuesto.

Cuestiones relacionadas