2012-04-27 12 views
5

Sto creando un TBB C#. Ho il codice XML come mostrato di seguito.Come aggiungere dll di terze parti in Tridion per 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> 

codice 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()))); 
} 

Nel tag di codice XML "corpo" si è verificato più volte. Devo estrarre ogni singolo contenuto del tag "body". Per quello scopo sto usando il pacchetto agility HTML. Per farlo funzionare in C# TBB, Come aggiungere la DLL del pacchetto di agilità HTML al sistema Tridion? Inoltre, fornire uno snippet di codice di esempio in agilità html per scorrere i tag del corpo.

Se HTML Agility non funzionerà con C# TBB, quindi mi suggerisca un modo per ottenere il contenuto del tag "body"?

Grazie in anticipo. La risposta anticipata è apprezzata.

risposta

2

Pensa che puoi anche utilizzare ILMerge per unire insieme la DLL di terze parti e l'assieme TBB in una singola che puoi quindi caricare in Tridion.

+2

Sì, puoi, e ho buone esperienze con questo.L'unica ragione per cui non l'ho menzionato, è che l'unione della propria DLL con una DLL di terze parti potrebbe facilmente portare alla violazione del copyright. Finché sei sicuro che non sarà un problema, potresti usare anche questo approccio. Fornirò maggiori dettagli in una risposta separata. – Quirijn

+0

Non penso che ci sia un problema di copyright. Il copyright riguarda il codice sorgente. Se qualcuno non vuole che il loro IL venga utilizzato, non dovrebbe spedire una DLL di assemblaggio, perché questo è effettivamente il trasporto dell'IL. Certo, potresti violare le condizioni della licenza, ma questo è un altro problema, e non ho mai visto una condizione che vieti questa tecnica. Sul lato negativo, l'utilizzo di ILMerge può causare alcuni effetti collaterali sgradevoli. Recentemente ho avuto un problema con un aggiornamento rapido di Tridion che AFAIK si sarebbe presentato solo con un approccio ILMerge –

7

Sarà necessario inserire la DLL di terze parti nella Global Assembly Cache (GAC). Per il codice del pacchetto di agilità di esempio, ti suggerisco di fare una domanda a parte con un titolo più specifico.

+3

Ricordarsi di inserire la DLL nel GAC su ogni gestore di contenuto e computer del publisher. – Quirijn

4

L'utilizzo di ILMerge consente di evitare l'installazione di DLL esterne nel GAC. Assicurati di non violare alcuna legge (sul copyright) unendo il tuo codice con quello di qualcun altro. Tecnicamente, è abbastanza semplice da fare: dopo che il modello è stato compilato dalla DLL, un'azione post-compilazione lo unisce alle DLL esterne che potrebbero essere necessarie e crea una nuova DLL. È quindi possibile caricare la DLL unita in Tridion.

Esempio: supponiamo che il progetto del modello sia chiamato "MyTemplates" e che abbia una dipendenza da ExternalLibraryOne.dll e ExternalLibraryTwo.dll. Ecco cosa dovete fare:

  • Scarica ILMerge da http://www.microsoft.com/en-us/download/details.aspx?id=17630 (è gratuito)
  • All'interno della vostra soluzione di template, creare una cartella denominata Solution I prodotti e copiare ilmerge.exe lì.
  • Aprire le proprietà del vostro progetto template e aggiungere il seguente evento di post-generazione:

    "$ (SolutionDir) Soluzione I prodotti \ 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)"

  • costruire il modello progetto. La cartella di output (bin/Debug o bin/Release) ora conterrà un file chiamato MyTemplates.merged.dll. Puoi caricarlo su Tridion usando TcmUploadAssembly.

Si presume che si stia utilizzando .NET 4, naturalmente.

Problemi correlati