Tin*_*ina 6 .net json publish vsto xmlserializer
我有一个excel的加载项目.它在我的电脑上工作正常.但是,当我在客户端计算机上安装它时,它给了我提到的错误消息.
在publish-> prerequisites中,我勾选了这些项目:
.net框架sp1
Microsoft .net框架4
Microsoft Office 2007主互操作程序集
用于办公室运行时的Microsoft visual studio 2010工具
Windows安装程序4.5
我正在使用JSON.这是我班级的代码:
[Serializable]
[JsonObject(MemberSerialization.OptIn)]
public class documentSchemaRestInfo
{
[System.Runtime.Serialization.DataMember]
[JsonProperty]
public double id { get; set; }
[System.Runtime.Serialization.DataMember]
[JsonProperty]
public string name { get; set; }
[System.Runtime.Serialization.DataMember]
[JsonProperty]
public string description { get; set; }
[System.Runtime.Serialization.DataMember]
[JsonProperty]
public string[] fields { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
//*********************
使用该类的代码:
public List<DocumentField> getSchemaOfGroup(documentGroupPk groupPK)
{
List<DocumentField> result = new List<DocumentField>();
HttpWebRequest request = (HttpWebRequest)WebRequest.
Create(ProxyFactory.baseAddress+"/services/rest/group/"
+ groupPK.id + "/schema");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
string responseBody = streamReader.ReadToEnd();
dynamic ds = ((dynamic)JsonConvert.DeserializeObject(responseBody))
.documentSchemaRestInfo;
foreach (dynamic f in ds.fields)
{
result.Add(new DocumentField(
f.name.ToString(),f.internalName.ToString(),false));
}
return result;
}
Run Code Online (Sandbox Code Playgroud)客户端计算机上安装了Excel 2010.
这是抛出异常的代码行:
excelApp = (Excel.Application)
System.Runtime.InteropServices.Marshal.GetActiveObject
("Excel.Application");
Run Code Online (Sandbox Code Playgroud)奇怪的是,当我按照以下步骤操作时它会起作用:在客户端上运行它并获得异常.在我自己的PC上运行它(没有异常发生).在客户端计算机的应用程序上按下我制作的Excel功能区上的加载项按钮,这次我没有得到任何异常!我检查了很多次.每次我按照这个顺序,它工作正常!
11.

非常感谢提前.
编辑:12.我的应用程序的工作方式如下:用户第一次点击功能区上的按钮时,会出现登录表单,如果他被授权,则会显示他要求的表单.下一次出现问题表格.只有第一次点击时才会发生异常.这是我的代码:(最后一行没有异常,但第7行的情况不是这样)
1.//If there is no ticket, means we haven't had a successfull login yet.=>
2.// We should show the login form instead of groups form.
3.if (string.IsNullOrEmpty(ProxyFactory.ticket))
4.{
5. okOrCancel = new LoginForm().ShowDialog();
6. if (okOrCancel == DialogResult.OK)
7. new GroupsForm().ShowDialog();
8.}
9.//If the is a ticket, means we have had a successful login.
10.else
11. new GroupsForm().ShowDialog();
Run Code Online (Sandbox Code Playgroud)
仅查看代码 Spinets 有点令人困惑,但从问题的标题我可以猜测您在动态创建序列化程序集时遇到问题(安全问题或部分信任问题)。您可以尝试通过转到项目属性/构建并从列表中选择“关闭”,将 Addin dll 中的“生成序列化程序集”关闭。