Domanda

Sto usando SharePoint 2007 e Visual Studio 2008. Ho cambiato un codice personalizzato in una soluzione esistente.Ora ho finito lo sviluppo e cerco di generare il file WSP.C'è solo 1 problema.Ho bisogno di generare un file WSP con la politica CAS e non al GAC.La persona che ha creato questa soluzione lo stava facendo con questo scenario:

1) Modificato il percorso di uscita Build su "80 \ Bin".

2) Fai una versione di rilascio

3) Genera un wsp con WSP Builder

4) Modificare l'estensione del file WSP generato su .cab

5) Estrai il file della cabina

6) Trova e modifica il manifest.xml

7) Cambia l'elemento su:

<CodeAccessSecurity>
    <PolicyItem>
      <PermissionSet class="NamedPermissionSet" version="1" Description="WSPBuilder generated permissionSet" Name="MyCompany.MyCustomer.SharePoint.MySolutionNamed20708d8-8d7f-448d-ae19-52e93e729cc5">
    <IPermission class="AspNetHostingPermission" version="1" Level="Minimal" />
    <IPermission class="SecurityPermission" version="1" Flags="Assertion, Execution, ControlThread, ControlPrincipal" />
    <IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security,  version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" version="1" ObjectModel="True"  UnsafeSaveOnGet="True" Unrestricted="True"/>
</PermissionSet>
      <Assemblies>
        <Assembly Name="MyCompany.MyCustomer.SharePoint.MySolutionName" Version="1.0.0.0" PublicKeyBlob="002400000480000094000000060200000024000052534131000400000100010061501CE5D2B707D9EE7AFE461FC262A07CD83D417AE9AC31B142586832A038C385DF5A19C4974B39E0EE5F166B4F9C1707987030522B7B5808D910E6C749BAC97EE79976273BA06516AD5D7DB9DD7C53D8A47B038479E627BB0B2AAE299D6F0C392AF7C00CE42D6A3FB25F391AAC36C5217AE98FBBD18AFE3736905FFF0058A4" />
      </Assemblies>
    </PolicyItem>
  </CodeAccessSecurity>
.

8) Salva il file

9) Creare il file della cabina

10) Creare il file wsp

Qualcuno mi ha detto che questa è la soluzione cattiva per farlo.Dovrebbe essere possibile con il wspbuilder nella riga di comando.Qualcuno può dirmi come fare questo?

È stato utile?

Soluzione

Aggiungi questo appena sopra il tuo file di classe pubblica!

[SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Impersonate = true)] 

[SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, ObjectModel = true)]
.

Quindi lascia che Wspbuilder faccia il resto per te in quanto costruirà il file XML per te all'interno del file Manifest!

Modifica

.

Il codice che segue la chiamata nel metodo della domanda verrà eseguito Solo se tutti i chiamanti nello stack di chiamata sono concessi il permesso Per accedere al modello oggetto SharePoint. Si noti che questa richiesta di sicurezza non ha alcun impatto sul codice che viene prima della chiamata nella domanda metodo. La situazione sarebbe diversa se dovessi usare il Sintassi della sicurezza dichiarativa per annotare mymethod con il SharePointpermissionAttribute Metadati Attributo:

   [SharePointPermission(SecurityAction.Demand, ObjectModel=true, Unrestricted=true)]
public void MyMethod()
{
   ...
   SPWeb site = SPContext.Current.Web;
   ...
}
.

Nel tuo caso è la classe principale che contiene il metodo Crea controllo figlio, come esempio:

using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

namespace test    {

    [SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Impersonate = true)] 
    [SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, ObjectModel = true)]
    [ToolboxItemAttribute(false)]
    public class VisualWebPart1 : WebPart
    {
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.
        private const string _ascxPath = @"~/_CONTROLTEMPLATES/test/VisualWebPart1UserControl.ascx";

        protected override void CreateChildControls()
        {
            Control control = Page.LoadControl(_ascxPath);
            Controls.Add(control);
        }
    }
}
.

Anche dipende da ciò che vuoi visibile alla politica? come IV notato all'interno del blocco dei commenti. Con la mia comprensione della sua classe principale che ha bisogno della politica e non tutte le classi all'interno del progetto!

http://msdn.microsoft.com /en-us/library/gg427711(v=office.12).aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top