Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for assembly in partial trust mode #113

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Pxtl
Copy link

@Pxtl Pxtl commented Mar 29, 2016

Allows the assembly to be used in SQLCLR for example.

  • Add AllowPartialTrustedCallers assembly attribute
  • Skip Getter Factories that error out because of partial trust

Allows the assembly to be used in SQLCLR for example.
- Add AllowPartialTrustedCallers assembly attribute
- Skip Getter Factories that error out because of partial trust
@Romanx
Copy link
Collaborator

Romanx commented May 19, 2016

Hey there, I'd love to include this however I think there could be some optimisation to be done by caching the ValueGetters that are removed as currently every time they will be removed and reset. I don't really have the time to do this but if you'd like to amend your contribution with the change i'd be happy to merge it.

Thanks,

@Pxtl
Copy link
Author

Pxtl commented May 24, 2016

I'll have to do some experiments with this. My goal on this front was support for SQLCLR embedding the assembly into a database - with this patch, it works, as long as you strictly avoid any of the reflection-based components. If you throw a pile of dictionaries or XML or lists at it, Nustache runs inside a MSSQL Server like a champ.

The problem is that the errors if you don't are really hairy, and there's no good way for an assembly to know if it's running in a low-trust context other than the exceptions of "you're not allowed to do that" without jumping to a new C# version.

I'll probably have to keep a similar workflow of "just try it and if you get an exception fail over into low-trust-mode" but I would keep a flag and a 2nd listing of "these are the low-trust getter factories, and some better error-messages. Maybe a global setter to switch it into low-trust mode.

The challenge is that most of the getter factories are fine, it's the actual getters they instantiate that fail in low-trust mode. That could be handled with polite error messages.

The special problem is, iirc (haven't tried it without my patch in months), PropertyDescriptorValueGetterFactory, where the factory throws a HostProtectionException just checking if it's applicable.

The other problem, of course, is that unit testing low-trust features is agony, so I haven't bothered. NUnit doesn't have any support of switching trust modes to speak of.

@Romanx
Copy link
Collaborator

Romanx commented May 24, 2016

Another option is to use my other library Stubble. It's a little more configuration based which may work better in a low trust environment as you could remove those that. I've never actually done any work in that area but I'd be interested in your findings.

As for this pull request, the implementation with catching the exception does seem like the only real solution but performing that once and then caching that low trust list is probably more efficient although I have no numbers to back that up.

Copy link

@claudiamurialdo claudiamurialdo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be possible to make any progress in these changes?.
I need the AllowPartiallyTrustedCallers flag.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants