2013-12-19 3 views
6

현재 문서에서 XML을 가져 와서 웹 페이지에 표시하는 업로드 시스템을 작성하고 있습니다.어셈블리에 대한 참조를 추가해야합니다 'WindowsBase, Version = 3.0.0.0

제가 직면 한 문제는 웹 사이트의 XML 추출 부분을 추가 할 때마다 컴파일러가 제목에서 언급 한 오류를 반환한다는 것입니다. 수동으로 및 드롭 다운 메뉴에서 WindowsBase를 이미 추가했습니다.

내 코드는 현재 모양이 같습니다.

<script runat="server"> 
    //This template is being built to allow the viewstates to be displayed and allow them to be hidden 
    //or shown at the same time. The buttons are being added so we can test whether they will 
    //be hidden on page use 


    public string _TempFileLocation = ""; //Used to locate Word Document File Path 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 


      string viewStateDisplay1 = "ViewState1 is now being displayed"; 
      string viewStateDisplay2 = "ViewState2 is now being displayed"; 
      // var ViewShow = viewStateDisplay1; 
      // var ViewShow2 = viewStateDisplay2; 

      if (ViewState["PageState"] == null) 
      { 
       ViewState["PageState"] = viewStateDisplay1; 
      } 

       else 
       { 
        ViewState["PageState"] = viewStateDisplay2; 
        //viewStateDisplay = false; 
       } 
     } 

    } 

    //button that shows the label string 
    protected void btnClick_Click(object sender, EventArgs e) 
    { 
     lblString.Text = ViewState["PageState"].ToString(); 
     lblString.Visible = true; 
    } 

    //button that hides the div, changing "lblstring" or adding more should be able to hide 
    //or show whatever methods/objects we want 
    private void Close(object sender, EventArgs e) 
    { 
     lblString.Visible = !lblString.Visible; 
     lblString.Visible = false; 
    } 


    //This will be the default set for the page. It will start on true for viewstatedisplay 
    //this will be done again, but with viewstatedisplay2 for the next method regarding 
    //the two columns and displaying document and DB data. "viewStateDisplay2.Visible = true" 

    //private void gotoviewStateDisplay1(object sender, EventArgs e) 
    // { 
    // ViewState("PageState") = 1; 
    // viewStateDisplay1.Visible = true; 
    // viewStateDisplay2.Visible = false; 
    //} 

    //private void gotoviewStateDisplay2(object sender, EventArgs e) 
    // { 
    // ViewState("PageState") = 2; 
    // viewStateDisplay1.Visible = false; 
    // viewStateDisplay2.Visible = true; 
    //} 




    //THE USER UPLOAD CONTROL. users use this to upload the document to the server 
    //This has validation so they cannot upload wrong file types/too large files 

    // public partial class UploadFileControl : System.Web.UI.UserControl 
    // { 

     //ViewState1 

     public void XMLextractor(string _filePath) 
     { 

      //XML extraction code 
      // displayFilepath.Text = _filePath; 
      // _TempFileLocation = _filePath; 

     } 

     //names the script manager which will be used when the user attempts to upload a form/gives an error if they incorrectly attempt to upload 
     protected void UploadButton_Click(object sender, EventArgs e) 
     { 
      //if file is located 
      if (FileUploadControl.HasFile) 
      { 
       try 
       { 
        //allow content type of document/docx 
        if (FileUploadControl.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") 
        { 
         //if the file is is less than 51mb 
         if (FileUploadControl.PostedFile.ContentLength < 10485760) // 10mb) 
         { 
          //name the filename, find the path of the name 
          string filename = Path.GetFileName(FileUploadControl.FileName); 
          //path of server upload (we just need to save it as a variable to be found on the next page, as it will be made/deleted 
          FileUploadControl.SaveAs(Server.MapPath("~/") + filename); 
          //update the label with file uploaded 
          StatusLabel.Text = "Upload status: File uploaded!"; 

          XMLextractor(Server.MapPath("~/") + filename); 

          //move onto template wizard page 


          WordprocessingDocument _TempDoc = WordprocessingDocument.Open(Server.MapPath("~/") + filename, true); 

          //labelContentControls.Text = fileUpload_Displayx(GetContentControls(_TempDoc)); 

          //will be used to grab the document string 
          //return; 

         } 
         else 
          //display the size the file needs to be less than 
          StatusLabel.Text = "Upload status: The file has to be less than 10mb!"; 
        } 
        else 
         //tell the user only docx files are accepted 
         StatusLabel.Text = "Upload status: Only DOCX files are accepted!"; 
       } 
       catch (Exception ex) 
       { 
        //display the exception message, in which case it would be either size/type/if it's present 
        StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message; 
       } 


      } 

     } 
    // } 

    //insert or link to XMLfromDocument file here. This will declare the variables 
    //and take the required XML sections from the content controls of a document 
    //needs to run as the file is uploaded, then return the control content titles 

     // internal static class W 
     //{ 

     //} 

    //display the TemplateWizard boxes and button here, hide viewstate and display viewstate2 
    //display content controls from doc on box1, field names from DB in box2 
    //just create a string here that represents the final state of data being taken from XMLfromDocument 


     //public string fileUpload_Displayx (XElement _contentcontrol) 
     //{ 
     //  string str= ""; 
     //  str= _contentcontrol.Name.ToString(); 

     // return str; 

     //} 

    //public static displayDatabase(object sender, EventArgs e) 
    // { 

    //} 
    //run the validate button on templatewizard, will mark up any problems or give green light 


    //if red, allow users to replace fields in the left column, from ones in the atabase on the right 


    //display upload button when validation is succesful. When Upload button runs, Take to new 
    ///existing page of reports, allow users to download this 






</script> 

<!-- The following section will include all the html and forms etc !--> 

<!-- on implementation, create different divs for each section, and style appropriately. !--> 
<div> 


<!--Testing View state form!--> 
ViewState Data: <b><asp:Label ID="lblString" runat="server"/></b> 
<asp:Button ID="btnClick" runat="server" Text="Get ViewState Data" OnClick="btnClick_Click"/> 
<asp:Button ID="Closeform" runat="server" Text ="Hide PageState" OnClick="Close" /> 


<br /><br /><br /><br /><br /> 

<!-- User upload control !--> 
<asp:FileUpload id="FileUploadControl" runat="server" /> 
<asp:Button runat="server" id="UploadButton" text="Upload" onclick="UploadButton_Click" /> 
<asp:TextBox Text="" runat="server" ID="displayFilepath" /> 
<br /><br /> 
<asp:Label runat="server" id="StatusLabel" text="Upload status: " /> 

<br /> <br /> <br /> <br /> 



<!-- Viewdata2, the document and data from DB will be displayed !--> 

<!-- Document data !--> 
<div id="box1" class="box"> 

    <div class="box-top"> 
     Data Sources inside document 
    </div> 
    <div class="box-middle"> 
     <asp:Label runat="server" id="labelContentControls" text="label of content in document" /> 
     <p> Test </p> 
     <p> Test </p> 
    </div> 
    <div class="box-bottom"> 
    </div> 
</div>  

<!--Data from DB !--> 
<div id="box2" class="box"> 

    <div class="box-top"> 
     Data sources existing on the server 
    </div> 
    <div class="box-middle"> 
     <asp:Label runat="server" id="labelDatabasefields" text="label of content in database" /> 
     <p> Test </p> 
     <p> Test </p> 
    </div> 
    <div class="box-bottom"> 
    </div> 
</div> 


<input type="button" value="Create Template" id="view" class="form_button"/> 



</div> 

내가 생각하는 코드는이 두 가지 중 하나입니다. 참조 된 어셈블리의

internal static class W 
    { 
     public static XNamespace w = 
      "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; 

     public static XName body = w + "body"; 
     public static XName sdt = w + "sdt"; 
     public static XName sdtPr = w + "sdtPr"; 
     public static XName tag = w + "tag"; 
     public static XName val = w + "val"; 
     public static XName sdtContent = w + "sdtContent"; 
     public static XName tbl = w + "tbl"; 
     public static XName tr = w + "tr"; 
     public static XName tc = w + "tc"; 
     public static XName p = w + "p"; 
     public static XName r = w + "r"; 
     public static XName t = w + "t"; 
     public static XName rPr = w + "rPr"; 
     public static XName highlight = w + "highlight"; 
     public static XName pPr = w + "pPr"; 
     public static XName color = w + "color"; 
     public static XName sz = w + "sz"; 
     public static XName szCs = w + "szCs"; 
    } 


    public static class XMLfromDocument 
    {    
     //the program will first need to query the document for the controls that do exist, then return them 

     //static void Main(); 

     public static XDocument GetXDocument(this OpenXmlPart part) 
     { 
      XDocument xdoc = part.Annotation<XDocument>(); 
      if (xdoc != null) 
       return xdoc; 
      using (Stream str = part.GetStream()) 
      using (StreamReader streamReader = new StreamReader(str)) 
      using (XmlReader xr = XmlReader.Create(streamReader)) 
       xdoc = XDocument.Load(xr); 
      part.AddAnnotation(xdoc); 
      return xdoc; 
     }  

     //following method gets the structure of the content controls/XML in the document 
public static XElement GetContentControls(WordprocessingDocument document) { 

    XElement contentControls = new XElement("ContentControls", 
     document 
      .MainDocumentPart 
      .GetXDocument() 
      .Root 
      .Element(W.body) 
      .Elements(W.sdt) 
      .Select(tableContentControl => 
       new XElement("Table", 
        new XAttribute("Name", (string)tableContentControl 
         .Element(W.sdtPr).Element(W.tag).Attribute(
          W.val)), 
        tableContentControl 
          .Descendants(W.sdt) 
          .Select(fieldContentControl => 
            new XElement("Field", 
             new XAttribute("Name", 
              (string)fieldContentControl 
                .Element(W.sdtPr) 
                .Element(W.tag) 
                .Attribute(W.val) 
              ) 
            ) 
          ) 
       ) 
      ) 
    ); 
     //display the content controls in a web form in this project using this, the control will have to be added to templatewizard 
     return contentControls; 

      //need to mark the source which will be a file in the same directory as this for test purposes. 

     } 
     //last function that should be done once the details are displayed is that the document must be deleted 

    } 

}  

또는

WordprocessingDocument _TempDoc = WordprocessingDocument.Open(Server.MapPath("~/") + filename, true); 

답변

7

확인 속성 (참조를 선택하고 F4를 클릭) - 사용하려고 "로컬 복사 : true"로

+1

감사합니다 아주 많이. 참조의 대부분은 여전히 ​​false로 설정되어 있습니다.이 점을 추가하면 프레임 워크 버전이나 다른 것을 대체 할 수 있습니까? – DevAL

+2

아니요, 모든 참조에 대해이 설정을 지정할 필요가 없습니다. 문제는 IIS가 GAC에 등록되어 있지 않아 WindowsBase.dll을 찾을 수 없다는 것입니다. 그리고 그것은 귀하의 웹 사이트/bin 폴더에 위치해 있지 않습니다. '로컬 복사'를 true로 설정하면 컴파일러가이 라이브러리를/bin 폴더로 복사합니다. – nZeus

+0

의미가 있습니다, 환호! – DevAL

관련 문제