小编Ala*_*ald的帖子

防止在Python中导入

我将python作为脚本平台嵌入到应用程序中,因此用户可以编写python脚本.我试图阻止进口,因此无论如何它们都不会造成损害,并且必须坚持使用提供的API.

我提出了以下Python代码:

__builtins__ .__import__= None 
reload = None
Run Code Online (Sandbox Code Playgroud)

这似乎阻止了导入并阻止了模块的重新加载.需要防止重新加载,因此他们无法重新加载内置组件,从而使它们恢复工作状态.

但是我不是Python专家.我还缺少其他任何用户仍然可以导入模块的东西吗?

谢谢

python import scripting

8
推荐指数
1
解决办法
434
查看次数

实体框架代码第一个子导航属性null

我有一个项目使用实体框架代码第一版本6与懒惰加载.在模型级别,它有一个包含模块的课程.课程类声明如下:

public class Course : BaseEntity
{
    public String Title { get; set; }
    public String Description { get; set; }
    public int Revision { get; set; }

    //private IList<Module> _modules;
    //public virtual IList<Module> Modules
    //{
    //    get { return _modules ?? (_modules = new List<Module>()); }
    //    set { _modules = value; }
    //}
    public virtual ICollection<Module> Modules { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的Module类声明如下:

public class Module : BaseEntity
{
    [ForeignKey("Course")]
    public Int64 CourseID { get; set; …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc entity-framework

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

在单行lambda表达式中使用函数而不是sub导致的错误

我刚刚遇到一个同事写了一个错误的情况,尽管我们知道如何修复它但我们不明白它为什么会发生.我多年来一直在使用lamda表达式,但是对于C#比VB更有经验,我显然对某些东西有一个根本的误解.

在使用.Net 3.5的Visual Studio 2010中观察到以下内容.

我已将其简化为以下简单的测试代码,该代码重现了类似的场景:

在Windows窗体上,我将以下内容简单地执行lambda,然后将测试对象的值打印到文本框中:

Private Sub ExecuteAction(ByVal action As Action(Of TestClass))
    Dim testObj As New TestClass()
    action(testObj)
    TextBox1.Text = testObj.MyInteger
End Sub

Public Class TestClass
    Public MyInteger As Integer
End Class
Run Code Online (Sandbox Code Playgroud)

然后我运行一些代码来使用lambda调用它.

在下面的例子中,文本框中的输出是15,正如我所期望的那样:

ExecuteAction(Sub(obj) obj.MyInteger = 15)
Run Code Online (Sandbox Code Playgroud)

在下面的例子中,输出也是15,正如我所期望的那样(它确实会产生一个警告,因为没有指定返回值,我理解并且没有,因为它做了预期的事情):

ExecuteAction(Function(obj)
                 obj.MyInteger = 15
              End Function)
Run Code Online (Sandbox Code Playgroud)

在下面的例子中,输出为0,我不明白为什么:

ExecuteAction(Function(obj) obj.MyInteger = 15)
Run Code Online (Sandbox Code Playgroud)

为什么在最终场景中对象的值不会变为15?我需要了解单行函数lambdas和多行函数lambdas之间的区别,看看我是否需要检查所有产品是否存在类似的bug.它编译良好,不会产生警告,使其对我们的使用极其危险.

我尝试了以下内容,看看它是否在任何隐式Return之前强制执行有任何区别,但它没有:

ExecuteAction(Function(obj) (obj.MyInteger = 15))
Run Code Online (Sandbox Code Playgroud)

.net vb.net lambda

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

Visual Studio 2010,Visual Studio 2008和ClickOnce的Crystal Report

我在这里遇到了一些麻烦.我大约4周前将我们的Winforms产品之一从VS2008升级到VS2010.转换很好,但我们使用了Crystal Reports,因此不得不为Visual Studio 2010 Beta 2安装VS2010 Crsytal报告.这很好,并且给了我设计师等回来的水晶.当解决方案打开时,我选择不转换报告,因此它们仍然设置为原始版本的水晶.

然后我们继续进行了为期4周的开发,现在我在Vsiaul Studio 2010下进行了第一次ClickOnce部署,我遇到了严重的问题.ClickOnce应用程序文件设置为将CrystalReports相关模块作为先决条件.我仍然希望最终用户使用Crystal Reports for VS2008而不是2010年的运行时,这是非常大的和beta版.

当我发布清单时,说水晶的依赖是版本14.0.2000.0(VS2010版本的水晶报告)但项目中的所有DLL引用都设置为使用特定版本并指向10.5.3700.0(VS2008版本的水晶报告).这意味着当尝试从ClickOnce安装时,它失败了:

"无法安装或运行应用程序应用程序需要首先在全局程序集缓存(GAC)中安装程序集CrystalDecisions.CrystalReports.Engine版本14.0.2000.0"

我无法弄清楚为什么清单意图使用该版本号,因为所有引用都指向另一个版本.如果我将beta版的VS2010晶体运行时捆绑到ClickOnce部署中,则客户端会收到相反的错误消息,指出需要10.5.3700.0.如果我在客户端上安装10.5.3700.0,他们就会得到一个正常工作的系统,但是我必须手动安装10.5.3700.0版本,在此之前他们首先必须忍受2010年运行时(14.0.2000.0)的史诗安装.甚至得到使用.

基本上我试图让清单说10.5.3700.0或弄清楚为什么VS2010打算在那里放一个更新的版本号.

请帮忙.谢谢

.net c# clickonce visual-studio-2010 crystal-reports

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

将int数组传递给MVC Controller

我正在尝试将一个int数组从JavaScript传递给一个接受2个参数的MVC控制器 - 一个int数组和一个int.这是执行页面重定向到Controller Action返回的视图.

var dataArray = getAllIds(); //passes back a JavaScript array 
window.location.replace("/" + controllerName + "/EditAll?ids=" + dataArray + "&currentID=" + dataArray[0])
Run Code Online (Sandbox Code Playgroud)

dataArray包含1,7个我的样本用法.

控制器代码

public virtual ActionResult EditAll(int[] ids, int currentID)
{

  currentModel = GetID(currentID);
  currentVM = Activator.CreateInstance<ViewModel>();
  currentVM.DB = DB;
  currentVM.Model = currentModel;
  currentVM.ViewMode = ViewMode.EditAll;
  currentVM.ModelIDs = ids;

  if (currentModel == null)
  {
      return HttpNotFound();
  }

  return View("Edit", MasterName, currentVM);
}
Run Code Online (Sandbox Code Playgroud)

问题是当检查传递给控制器​​的int [] id时,它的值为null.currentID按预期设置为1.

我已经尝试设置jQuery.ajaxSettings.traditional = true这没有效果我也尝试在JavaScript中使用@ Url.Action创建服务器端URL.在传递数组之前我也尝试过JSON.Stringify

window.location.replace("/" + controllerName + "/EditAll?ids=" + JSON.stringify(dataArray) + …
Run Code Online (Sandbox Code Playgroud)

javascript arrays model-view-controller asp.net-mvc jquery

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

VB.Net处理关键字 - 我是否需要手动调用RemoveHandler?

我正在追踪某些应用程序中的内存泄漏.许多表单共享相同的拼写检查器对象,因此生活在任何单独的表单中.我知道如果没有正确删除处理程序事件,这可能是内存泄漏的原因.

AddHandler和RemoveHandler对我有意义,因为很明显如果调用了AddHandler,那么应该有一个相应的RemoveHandler.但是,Handles关键字会自动为您删除处理程序吗?

Private Sub spellingContextMenu_Popup(ByVal sender As Object, ByVal e As System.EventArgs) Handles spellingContextMenu.Popup
Run Code Online (Sandbox Code Playgroud)

在上面,如果spellingContextMenu存在很长时间但表单死了,那么应该手动删除处理程序吗?

Microsoft自己的页面没有提供有关此http://msdn.microsoft.com/en-us/library/6k46st1y.aspx#feedback的指导

.net vb.net

2
推荐指数
1
解决办法
723
查看次数