Pergunta

Eu estou usando o sharepoint 2007 e visual studio 2008.Eu mudei algumas código personalizado em uma solução existente.Agora que eu terminei o desenvolvimento e a tentar gerar o arquivo wsp.Há apenas 1 problema.Preciso gerar um arquivo wsp com CAS política e NÃO para o gac.A pessoa que criou essa solução foi fazer com este cenário:

1) mudou a construir o caminho de saída para "80\bin".

2) fazer uma compilação de lançamento

3) gerar um wsp com wsp builder

4) altere a extensão de gerado o arquivo wsp para .cab

5) extraia o arquivo cab

6) localize e edite o manifest.xml

7) alterar o elemento:

<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) salve o arquivo

9) crie o arquivo cab

10) crie o arquivo wsp

Alguém me disse que isso é a pior solução para o fazer.Deve ser possível com o wspbuilder na linha de comando.Alguém pode me dizer como fazer isso?

Foi útil?

Solução

adicionar esta um pouco acima do seu público ficheiro de classe!

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

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

em seguida, deixe wspbuilder fazer o resto para você como ele irá criar o arquivo xml para você dentro do arquivo de manifesto!

EDITAR

O código que segue a chamada para o método de Procura será executado somente se todos os chamadores na pilha de chamada é a permissão para acessar o modelo de objeto do SharePoint.Note que esta demanda de segurança não tem nenhum impacto sobre o código que vem antes da chamada para a Demanda o método.A situação seria diferente se você fosse usar o segurança declarativa sintaxe para anotar MyMethod com o SharePointPermissionAttribute atributo de metadados:

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

no seu caso, a sua principal classe que contém a criar controles filho método, como um exemplo:

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

também depende do que você deseja visível para a política?como iv anotou no bloco de comentário.O meu entendimento é apenas a classe principal que precisa de política e não de cada classe dentro do projeto!

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top