小编Tim*_*ter的帖子

使用具有代码访问安全性的C#迭代器方法的问题

我有一个简单的方法,使用迭代器块返回IEnumerable<T>:

IEnumerable<MyItem> GetItems()
{
    foreach (var item in Items)
    {
        yield return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

通常,此方法工作正常,但如果我将一个[SecurityCritical]属性应用于程序集(或包含上述方法的类),它会TypeLoadException在尝试调用该方法时抛出一个.无法加载的类型是编译器生成的类,它对应于迭代器方法,它GetEnumerator是导致问题的方法,因为它是安全透明的.

为了比较,如果我修改上面的方法,使其填充并返回a List<MyItem>,一切正常.

有什么建议?

谢谢,

蒂姆.

c# iterator typeloadexception code-access-security yield-return

7
推荐指数
1
解决办法
316
查看次数

如何与ng-switch中的全局变量进行比较

我正在使用AngularJS $rootScope对象来公开一些需要控制器和视图都可访问的全局常量:

var app = angular.module('myApp', []);

app.run(function ($rootScope) {
    $rootScope.myConstant = 2;
});
Run Code Online (Sandbox Code Playgroud)

当我尝试在视图中呈现全局值时,它可以正常工作:

{{myConstant}}
Run Code Online (Sandbox Code Playgroud)

同样,如果我在ng-if条件中引用全局值,它也可以工作:

<span ng-if="someValue == myConstant">Conditional content</span>.
Run Code Online (Sandbox Code Playgroud)

但是,当尝试在ng-switch块中使用相同的值进行比较时,它永远不会计算为true.这个JSFiddle演示了我尝试让它工作的尝试.我也尝试显式引用常量值作为$rootScope表达式的成员和表达式(在双花括号内)但没有任何作用.

我有什么想法我做错了吗?

谢谢,

蒂姆

javascript angularjs ng-switch rootscope

6
推荐指数
2
解决办法
3647
查看次数

如何在物理iOS设备上调试Xamarin.iOS应用程序

对于这个长期的问题,请提前道歉,但是我浪费了3天没有成功尝试建立一个Xamarin.iOS开发环境,允许我在物理设备(而不是iPhone模拟器)上进行调试,我感到很茫然尝试下一步.

我相信我的设置是一个标准的Xamarin配置:

  • Windows 10 PC运行Visual Studio 2015和Xamarin v4.2.0.703
  • HTC手机USB连接到PC进行Android调试(工作正常)
  • MacBook使用Xamarin Studio v6.1.1和Xcode v8.0运行OS X 10.11
  • iPhone或iPad USB连接到Mac进行iOS调试

我开始在Visual Studio中创建一个Xamarin解决方案,我最初在Android上开发和调试.

为了进入iOS调试我然后使用Xcode和Xamarin Studio设置Mac,启用它进行远程登录,并使用与我的Xamarin.iOS应用程序相同的包标识符创建一个虚拟Xcode项目.我还尝试了为应用程序创建签名身份和配置文件以及在Mac上下载/安装它们的相当复杂的过程.这个过程太不直观了(Xcode中的视觉反馈很差),我不确定我是否已经正确完成了.但是,我能够在iPhone上运行虚拟Xcode项目,所以我认为它一定没问题?

在Windows PC上,Visual Studio设置中的Xamarin > iOS选项窗格确认Visual Studio已连接到Mac,并且附加的iPhone也被列为候选目标设备,因此似乎所有内容都已设置为进行设备上调试.

如果我尝试从Visual Studio在iPhone模拟器上调试应用程序,它可以正常工作.但是,物理iPhone上的调试失败,并显示以下无用的消息:

Xamarin.Messaging.Exceptions.MonotouchException: error MT1006: Could not install the
application '/Users/Tim/Library/Caches/Xamarin/mtbs/builds/Test.iOS/c4f40041b6c58fc579a727bccfc18614/bin/iPhoneSimulator/Debug/TestiOS.app' 
on the device 'Tim’s iPhone': AMDeviceSecureInstallApplicationBundle returned: 0xe8008001.
Run Code Online (Sandbox Code Playgroud)

作为比较,我还尝试使用Xamarin Studio直接在Mac上进行调试.同样,iPhone模拟器工作正常,但甚至无法使用物理设备启动调试会话,因为连接的iPhone未被列为调试的候选目标设备.iPhone配置.

如果我打开项目选项并导航到iOS Debug视图,我可以看到与Debug配置关联的平台是iPhoneSimulator.将其更改为iPhone并保存配置它似乎有效,但实际上并未保存更改.我想这就是我的测试设备未列出的原因,但我不清楚我需要做些什么来让Xamarin Studio接受我的更改.

所以,经过所有这些实验,我完全迷失了.为这个设置过程提供一个完整,强大的AZ教程会很有帮助,但如果没有这个,那么接下来我应该尝试的任何建议都将非常感激.

更新:如果我使用Ad-Hoc项目配置(在Visual Studio或Xamarin Studio中),它会在设备上正确部署和启动应用程序,但不会附加调试器.如果我在Ad-Hoc项目配置中明确启用调试,Xamarin Studio会忽略它,但Visual Studio会附加调试器,但不会遇到任何断点.这一切听起来都合适吗?它是否提供了我需要更改的线索以使真正的Debug配置正常工作?

visual-studio xamarin.ios xamarin ios-provisioning xamarin-studio

6
推荐指数
1
解决办法
1万
查看次数

C# - 如何测试实例是否为其类型的默认值

给定一个未知引用或值类型的实例,有没有办法测试实例是否包含该类型的默认值?我设想这样的事情......

bool IsDefaultValue(object value)
{
    return value == default(value.GetType());
}
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,因为GetType返回运行时类型,但我希望有人可以建议类似的技术.谢谢.

c#

5
推荐指数
1
解决办法
153
查看次数

如何在两个.NET AppDomains之间传递未知类型?

我有一个.NET应用程序,其中单独的AppDomains中的程序集必须共享按值传递的序列化对象.

两个程序集都引用一个共享程序集,该程序集定义服务器类的基类,并定义将在域之间传递的entiy类型的基类:

public abstract class ServerBase : MarshalByRefObject
{
    public abstract EntityBase GetEntity();
}

[Serializable]
public abstract class EntityBase
{
}
Run Code Online (Sandbox Code Playgroud)

服务器程序集定义服务器类和实体类型的具体实现:

public class Server : ServerBase
{
    public override EntityBase GetEntity()
    {
        return new EntityItem();
    }
}

[Serializable]
public class EntityItem : EntityBase
{
}
Run Code Online (Sandbox Code Playgroud)

客户端程序集创建AppDomain托管服务器程序集的位置,并使用服务器类的实例来请求实体类型的具体实例:

class Program
{
    static void Main()
    {
        var domain = AppDomain.CreateDomain("Server");

        var server = (ServerBase)Activator.CreateInstanceFrom(
            domain,
            @"..\..\..\Server\bin\Debug\Server.dll",
            "Server.Server").Unwrap();

        var entity = server.GetEntity();
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这种方法失败了,SerializationException因为客户端程序集并不直接了解返回的具体类型.

我已经读过使用二进制序列化时.NET Remoting支持未知类型,但我不确定这是否适用于我的设置或如何配置它.

或者,是否有任何其他方法可以将未知的具体类型从服务器传递到客户端,因为客户端只需要通过其已知的基类接口访问它.

谢谢你的建议, …

.net remoting appdomain

5
推荐指数
1
解决办法
1700
查看次数

System.Web.Optimization.JsMinify 生成无效的 JavaScript

System.Web.Optimization在我认为是标准配置的情况下使用 v1.3,以捆绑和缩小 MVC 5 Web 应用程序中的 JavaScript 和 CSS 文件。在大多数情况下,这工作得很好,但我发现了 JavaScript 被缩小过程损坏的情况。

这是最初的 AngularJS 输入验证指令的简化版本:

var myApp;
(function (myApp) {
    myApp.module.directive("validator", [
        function () {
            return {
                link: function (scope, element) {
                    var validators = [
                        { signal: "required", message: "Please enter a value", value: null },
                        { signal: "email", message: "Please enter a valid email address", value: null }
                    ];
                    $("input", element).on("blur", function () {
                        for (var i in validators) {
                            var validator = validators[i];
                            if (scope.$parent.form[scope.modelName].$error[validator.signal]) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc minify bundling-and-minification webgrease

5
推荐指数
1
解决办法
2937
查看次数

Visual Studio:如何为 Xamarin Android 应用程序生成调试符号

我有一个使用 Visual Studio 创建的 Xamarin.Forms 应用程序,其中包括 Android 和 iOS 项目。

该应用程序通过应用程序中心部署,支持崩溃日志记录,但此功能需要上传应用程序的调试符号。

App Center 文档包含有关如何查找和上传 iOS 项目调试符号的详细信息,但没有针对 Android 项目的等效文档。我也无法从 Xamarin 或其他地方在线找到此文档。

任何人都可以向我指出解释 Xamarin.Android 调试符号的资源(或告诉我过程)吗?

debug-symbols xamarin.android visual-studio-app-center

5
推荐指数
1
解决办法
568
查看次数

MVC4的DotNetOpenAuth TwitterClient示例不尊重先前登录

如果我使用Internet Application模板创建ASP.NET MVC 4 Web应用程序,它会预先安装使用一系列OAuth和OpenID提供程序实现身份验证所需的所有组件和配置.只需添加我的Twitter消费者密钥和秘密即可AuthConfig.cs通过Twitter激活身份验证.

但是,它似乎没有像我期望的那样工作.

如果我尝试使用Twitter进行身份验证,则无论我是否已经登录Twitter,它都会显示Twitter登录页面.它还让我退出Twitter,因此我不得不在下次浏览器访问Twitter时重新进行身份验证.

这是一个错误,还是需要一些额外的配置来将其转换为更常见的无缝工作流程(对于像Google这样的其他提供商正常工作)?

提前致谢.

蒂姆

dotnetopenauth twitter-oauth asp.net-mvc-4

4
推荐指数
1
解决办法
3065
查看次数

实体框架5工作单元模式 - 我应该在哪里调用SaveChanges?

如果这似乎是一个重复的问题,请提前道歉.这个问题是我能找到的最接近的问题,但它并没有真正解决我所面临的问题.

我在ASP.NET MVC4应用程序中使用Entity Framework 5并尝试实现工作单元模式.

我的工作单元类实现IDisposable并包含我的 - DbContext派生对象上下文类的单个实例,以及许多存储库,每个存储库都派生一个通用基础存储库类,它公开了所有常见的存储库功能.

对于每个HTTP请求,Ninject创建Unit of Work类的单个实例并将其注入控制器,并在请求完成时自动处理它.

由于EF5抽象出数据存储并且Ninject管理对象上下文的生命周期,因此它似乎是使用代码访问内存中实体对象而不需要明确管理其持久性的完美方式.换句话说,为了最佳地分离关注点,我设想我的控制器操作方法能够使用和修改存储库数据,而无需SaveChanges事后显式调用.

我实现这个想法的第一次(naiive)尝试SaveChanges在每个修改数据的存储库基类方法中调用.当然,我很快就意识到这不是性能优化的(特别是在对同一方法进行多次连续调用时),也不适应动作方法直接修改从存储库检索的对象的属性的情况.

所以,我改进了我的设计,以消除这些过早的调用,SaveChanges并在处理工作单元实例时用一个调用替换它们.这似乎是MVC中工作单元模式最干净的实现,因为工作单元自然是作用于请求的.

不幸的是,在构建了这个概念之后,我发现了它的致命缺陷 - 事实上,添加到或删除的对象在被调用之前DbContext不会被反射,甚至在本地不会被反射SaveChanges.

那么,您对消费代码应该能够使用对象而不明确地持久化它的想法有何看法?而且,如果这个想法似乎有效,那么用EF5实现它的最佳方法是什么?

非常感谢你的建议,

蒂姆

更新:根据@ Wahid的回复,我在下面添加了一些测试代码,其中显示了消费代码显式调用必不可少的一些情况SaveChanges:

var unitOfWork = _kernel.Get<IUnitOfWork>();
var terms = unitOfWork.Terms.Entities;

// Purge the table so as to start with a known state 
foreach (var term in terms)
{
    terms.Remove(term);
}

unitOfWork.SaveChanges();

Assert.AreEqual(0, terms.Count());

// Verify that additions are …
Run Code Online (Sandbox Code Playgroud)

entity-framework savechanges unit-of-work repository-pattern asp.net-mvc-4

3
推荐指数
1
解决办法
3244
查看次数

如何使用带有单选按钮列表的 Bootstrap 手风琴

我正在尝试构建一个将 HTML 单选按钮列表与 Bootstrapcollapse组件提供的手风琴功能相结合的 UI 。目标是选择任何单选按钮也会展开紧邻其下方的手风琴面板。

这是一个演示部分工作实现的 JsFiddle。不幸的是,虽然手风琴功能有效,但单选按钮没有被选中(除了最初的选择,随后永远不会改变)。

请原谅我的示例中无效的 HTML。我知道input元素没有href属性,但我不认为这是问题的原因。

我已经看到了类似问题的这个答案,但我宁愿避免编辑 Bootstrap 代码,并希望可能有一种纯粹的声明方式来完成这项工作。

非常感谢您的建议,蒂姆

编辑:对于面临相同问题的任何其他人,此功能在 Bootstrap v3.0 中开箱即用。

accordion radio-button twitter-bootstrap

3
推荐指数
1
解决办法
9846
查看次数