sharepoint - Sharepoint2013 webpart can't load custom dll from GAC -
i'm trying use third party dll called asptokeninputlib in sharepoint2013 webpart . working while when loaded in bin directory when tried move gac won't work , it's stopped working if load in bin well. error object reference not set instance of object. sharepoint logs shows
system.nullreferenceexception: object reference not set instance of object. @ asptokeninputlib.asptokeninput.onload(eventargs e)
my package manifest file includes
<assemblies> <assembly location="asptokeninputlib.dll" deploymenttarget="globalassemblycache" /> <assembly location="bidsearchwebpart.dll" deploymenttarget="globalassemblycache"> <safecontrols> <safecontrol assembly="bidsearchwebpart, version=1.0.0.0, culture=neutral, publickeytoken=59049686a9425568" namespace="bidsearchwebpart.visualwebpart1" typename="*" /> </safecontrols> </assembly>
if remove asptokeninput controls in webpart webpart loads correctly don't think there's problem finding control in gac (i've used process monitor , looking in correct place in gac find control). reason though can't load dll.
any appreciated. thanks!
my ascx.cs files
using system; using system.diagnostics; using system.componentmodel; using system.web.ui.webcontrols; using system.web.ui.webcontrols.webparts; using system.data; using system.data.sqlclient; using system.text; using microsoft.sharepoint; using microsoft.sharepoint.administration; using system.web.script.serialization; using system.linq; using system.collections; using system.collections.generic; using asptokeninputlib; namespace bidsearchwebpart.visualwebpart1 { [toolboxitemattribute(false)] public partial class bidsearchwebpart : webpart { private enum columns { bidref, bidname, client, area, teamlead } private string teamleadsdata, execleadsdata, stagesdata, sectorsdata, servicesdata, gradesdata, costcentresdata, clientsdata, areasdata; public bidsearchwebpart() { teamleadsdata = runsp("uspselectteamleads", "teamlead", "name", connectionstring()); execleadsdata = runsp("uspselectexectechleads", "executivetechnicallead", "name", connectionstring()); stagesdata = runsp("uspselectstages", "stageid", "stagedescsearch", connectionstring()); sectorsdata = runsp("spselectmarketsectors", "sectorid", "mktsector", ccdconnectionstring()); servicesdata = runsp("spselectallservices", "serviceid", "service", ccdconnectionstring()); gradesdata = runsp("uspselectgrades", "gradeid", "gradedesc", connectionstring()); costcentresdata = runsp("uspselectcostcentres", "costcentre", "name", connectionstring()); clientsdata = runsp("spselectallclients", "companyref", "coname", ccdconnectionstring()); areasdata = runsp("uspselectareas", "areaid", "areaname", connectionstring()); } protected override void oninit(eventargs e) { base.oninit(e); initializecontrol(); } protected void page_load(object sender, eventargs e) { list<string> ddvalues = new list<string>(); if (!page.ispostback) { ddvalues.add("greater than"); ddvalues.add("less than"); ddcc.datasource = ddvalues; ddfv.datasource = ddvalues; ddcc.databind(); ddfv.databind(); } btnsearch.click += btnsearch_click; gvsearchresults.rowdatabound += gvsearchresults_rowdatabound; titeamlead.datasource = asptokeninput.datasourcetype.dataset; titeamlead.dataset = teamleadsdata; tiexectechlead.datasource = asptokeninput.datasourcetype.dataset; tiexectechlead.dataset = execleadsdata; tistage.datasource = asptokeninput.datasourcetype.dataset; tistage.dataset = stagesdata; tisector.datasource = asptokeninput.datasourcetype.dataset; tisector.dataset = sectorsdata; tiservice.datasource = asptokeninput.datasourcetype.dataset; tiservice.dataset = servicesdata; tigrade.datasource = asptokeninput.datasourcetype.dataset; tigrade.dataset = gradesdata; ticostcentre.datasource = asptokeninput.datasourcetype.dataset; ticostcentre.dataset = costcentresdata; ticlient.datasource = asptokeninput.datasourcetype.dataset; ticlient.dataset = clientsdata; tiarea.datasource = asptokeninput.datasourcetype.dataset; tiarea.dataset = areasdata; } void btnsearch_click(object sender, eventargs e) { //if (string.isnullorempty(txtprojectno.text) && string.isnullorempty(txtprojectname.text) && string.isnullorempty(txtclient.text) && string.isnullorempty(txtkeyword.text)) // nothing if search text boxes blank //{ // return; //} else { gvsearchresults.pageindex = 0; dosearch(); //} } protected void gvsearchresults_pageindexchanging(object sender, gridviewpageeventargs e) { gvsearchresults.pagertemplate = null; gvsearchresults.pageindex = e.newpageindex; dosearch(); } public void dosearch() { datatable dt = new datatable(); string = getwhereclause(); if (!string.isnullorempty(where)) { dt = filltable("spselectbidsearchresults", where); } gvsearchresults.datasource = dt; gvsearchresults.pagesize = 10; gvsearchresults.pagertemplate = null; gvsearchresults.databind(); } private datatable filltable(string storedproc, string where) { sqlconnection conn = new sqlconnection(connectionstring()); conn.open(); sqlcommand cmdproject = new sqlcommand(storedproc, conn); cmdproject.commandtype = commandtype.storedprocedure; cmdproject.parameters.addwithvalue("@whereclause", where); sqldataadapter da = new sqldataadapter(cmdproject); datatable dt = new datatable(); da.fill(dt); da.dispose(); conn.close(); return dt; } private string symbol(string ddtext) { if (ddtext.equals("greater than")) { return ">"; } else { return "<"; } } private string getwhereclause() { string = ""; = getwhereforcol(txtbidname.text, "", "bidname", "like", where); = getwhereforcol(txtdescription.text, "", "description", "like", where); = getwhereforcol(gettokens(titeamlead), "", "teamlead", "token", where); = getwhereforcol(gettokens(tiexectechlead), "", "executivetechnicallead", "token", where); = getwhereforcol(txtconstructioncost.text, ddcc.text, "constructioncost", "numeric", where); = getwhereforcol(txtfeevalue.text, ddfv.text, "feevalue", "numeric", where); = getwhereforcol(gettokens(tistage), "", "stage", "token", where); = getwhereforcol(gettokens(tisector), "", "primarysector", "token", where, "secondarysector"); = getwhereforcol(gettokens(tiservice), "", "primaryservice", "token", where); = getwhereforcol(gettokens(tigrade), "", "grade", "token", where); = getwhereforcol(gettokens(ticostcentre), "", "primarycostcentre", "token", where); = getwhereforcol(gettokens(ticlient), "", "clientref", "token", where); = getwhereforcol(gettokens(tiarea), "", "area", "token", where); return where; } private string getwhereforcol(string text, string ddtext, string colname, string coltype, string where, string othercol = "") { if (!string.isnullorempty(text)) { if (coltype.equals("like")) { = addtowhere(where, colname + " '%" + text + "%'"); } else if (coltype.equals("numeric")) { string symbl = symbol(ddtext); = addtowhere(where, colname + " " + symbl + " " + text); } else if (coltype.equals("token")) { if (!string.isnullorempty(othercol)) { = addtowhere(where, "(" + colname + " in (" + text + ")"); += " or " + othercol + " in (" + text + "))"; } else { = addtowhere(where, colname + " in (" + text + ")"); } } } return where; } private string addtowhere(string where, string clause) { if (!string.isnullorempty(clause)) { if (string.isnullorempty(where)) { = clause; } else { += " , " + clause; } } return where; } private string gettokens(asptokeninput ti) { stringbuilder strtokens = new stringbuilder(); list<asptokeninput.item> items = ti.selecteditems; foreach (asptokeninput.item item in items) { if (strtokens.length > 0) { strtokens.append(", "); } strtokens.appendformat("'{0}'", item.id); } return strtokens.tostring(); } public string getspsinglevalue(string spname, string spparamname, string spparamval, string connectionstr) { try { sqlconnection conn = new sqlconnection(connectionstr); sqlcommand cmd = new sqlcommand(spname, conn); cmd.parameters.addwithvalue(spparamname, spparamval); cmd.commandtype = commandtype.storedprocedure; conn.open(); string result = cmd.executescalar().tostring(); conn.close(); return result; } catch { return ""; } } void gvsearchresults_rowdatabound(object sender, gridviewroweventargs e) { if (e.row.rowtype == datacontrolrowtype.datarow) { label l; datarowview rowview = (datarowview)e.row.dataitem; string bidref = rowview["bidref"].tostring(); string teamleadid = rowview["teamlead"].tostring(); string teamleadname = getsinglerecord("uspselectteamleadbyid", connectionstring(), "@teamlead", teamleadid); l = (label)e.row.cells[(int)columns.teamlead].findcontrol("lblteamlead"); l.text = teamleadname; if (sitecollectionexists(bidref)) { l = (label)e.row.cells[(int)columns.bidref].findcontrol("lblbidref"); hyperlink hl = new hyperlink(); hl.navigateurl = "http://bidstore.gleeds.net/bids/" + bidref; hl.text = bidref; e.row.cells[(int)columns.bidref].controls.add(hl); l.text = ""; } } } //check if site collection exists @ given web application private static bool sitecollectionexists(string bidnr) { bool returnval = false; var r = spcontext.current.site.webapplication.sites.where(site => site.url.contains(bidnr)); foreach (spsite s in r) { returnval = true; } return returnval; } public string teamleads() { return teamleadsdata; } public string executivetechnicalleads() { return execleadsdata; } public string stages() { return stagesdata; } public string sectors() { return sectorsdata; } public string services() { return servicesdata; } public string grades() { return gradesdata; } public string costcentres() { return costcentresdata; } public string clients() { return clientsdata; } public string areas() { return areasdata; } public string getsinglerecord(string spname, string connectionstr, string param, string value) { sqlconnection conn = new sqlconnection(); sqlcommand command = new sqlcommand(spname, conn); conn = new sqlconnection(connectionstr); command.commandtype = commandtype.storedprocedure; command.parameters.addwithvalue(param, value); command.connection = conn; conn.open(); string result = command.executescalar().tostring(); conn.close(); return result; } public string runsp(string spname, string idcol, string namecol, string connectionstr) { arraylist data = new arraylist(); sqlconnection conn = new sqlconnection(); sqlcommand command = new sqlcommand(spname, conn); conn = new sqlconnection(connectionstr); command.commandtype = commandtype.storedprocedure; command.connection = conn; conn.open(); sqldatareader dr = command.executereader(); while (dr.read()) { data.add(new tokeninputrow(dr[idcol].tostring(), dr[namecol].tostring())); } conn.close(); return serialize(data); } private static string serialize(object obj) { javascriptserializer ser = new javascriptserializer(); return ser.serialize(obj); } private string connectionstring() { return "data source=10.2.40.17;initial catalog=bidopening;persist security info=true;user id=gtl_bidopening_user;password=g@rd3n12"; } private string ccdconnectionstring() { return "data source=10.2.40.17;initial catalog=ccdlive;persist security info=true;user id=gtl_ccdlive_user;password=g@rd3n"; } } public class tokeninputrow { public string id; public string name; public tokeninputrow(string _id, string _name) { id = _id; name = _name; } } }
i able step through page load, can't step asptokeninput dll. code fails after page load has finished. ti controls included in .ascx file
%@ register tagprefix="ati" assembly="asptokeninputlib" namespace="asptokeninputlib" %> ati:asptokeninput id="titeamlead" runat="server" hinttext="start typing teamlead..." />
Comments
Post a Comment