I have an Add-in project for excel. It works fine on my computer. But when I install it on a client machine it gives me the error message i mentioned.
In publish-> prerequisites, I have these items ticked:
.net framework sp1
Microsoft .net framework 4
Microsoft office 2007 primary interop assemblies
Microsoft visual studio 2010 tools for office runtime
Windows installer 4.5
I'm using JSON. this is the code for my class:
[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; }
}
//************************************************************
The code that uses the class:
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;
}
The client machine has Excel 2010 installed on it.
This is the line of code throwing the exception:
excelApp = (Excel.Application)
System.Runtime.InteropServices.Marshal.GetActiveObject
("Excel.Application");
What is weird is that it works when I follow the following steps: Run it on the client and get an exception. Run it on my own PC (where no exception occurs). Press the add-in button on the Excel ribbon I made, on the client machine's application AND THIS TIME I DON'T GET ANY EXCEPTION!! I checked it so many times. Every time I follow this order it works fine!
11.
Thanks a lot in advance.
Edit: 12. My application works like this: The first time user clicks on my button on the ribbon, the login form appears, and if he is authorized the form he has asked for appears. The next times just the asked form appears. and the exception happens JUST the first time clicks. here is my code for that: (No exception occurs in the last line, but that's not the case with the case with the 7th line)
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();
It's wee bit confusing looking just at the code spinets but from the title of the question I can guess that you have a problem with dynamic creation of serialization assembly (security issue or partial trust issue). You can try turning "Generate serialization assembly" in your Addin dll to Off by going to project properties / Build and selecting Off from the list.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With