我正在比较Java,您可以在调试模式下启动应用程序服务器,然后将IDE连接到服务器.并且您可以"动态"更改代码而无需重新启动服务器.只要您的更改不影响任何方法签名或字段,您只需重新编译一个类,应用程序服务器(servlet容器)将重新加载该类.
我想这在ASP.NET中是不可能的,因为所有类都打包到程序集中而你无法卸载/重新加载程序集,对吗?
因此,当您将.aspx页面和程序集部署到GAC并且您的代码隐藏更改时,您必须重新部署程序集并重置IIS.我正在谈论Sharepoint应用程序,我不确定你是否必须为私人程序集进行iisreset,但我猜你也有.
因此,调试带有代码的aspx页面的最佳方法我想是在主动调试时移除代码隐藏并移入页面,然后当它或多或少工作时将其移回到代码隐藏.(这仅适用于Sharepoint中的应用程序页面,网站页面不允许内联代码)
如何调试ASP.NET应用程序以减少耗时?
webapp使用Spring MVC.
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/*" value-ref="defaultHandler"/>
</map>
</property>
<property name="order" value="2"/>
</bean>
<bean name="defaultHandler" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/"/>
<property name="suffix" value=""/>
</bean>
Run Code Online (Sandbox Code Playgroud)
因此请求http://localhost:8080/application-context-folder/index.jsp
应该解析为application-context-folder/index.jsp并且它们将解析为domain1/docroot/application-context-folder.
是设计还是我需要在应用程序或配置中更改某些内容?
@Edit:有一个拼写错误,请求的URL是 http://localhost:8080/application-context-folder/index.jsp, not http://localhost:8080/index.jsp
我应该如何配置类以将三个下拉列表(日期,月份,年份)绑定到单个Date属性,以使其按照"每个属性的单个请求参数"方案的工作方式工作?我想应该通过重写initBinder方法添加一些自定义PropertyEditors.还有什么 ?
SPListItem.GetFormattedValue似乎对DateTime字段有一个奇怪的行为.它通过SPListItem的索引器检索DateTime值,该索引器根据此MSDN文章返回本地时间.这是Reflector的一个片段
public string GetFormattedValue(string fieldName)
{
SPField field = this.Fields.GetField(fieldName);
if (field != null)
{
return field.GetFieldValueAsHtml(this[fieldName]);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
所以它使用SPListItem的索引器来检索值,而不是使用SPFields.GetFieldValueAsHtml来格式化值.GetFieldValueAsHtml似乎假设日期是UTC并将其转换为本地时间,无论它是什么类型.(Reflector显示它使用GetFieldValueAsText,它使用value.ToString()但由于某种原因,它假设时间为UTC.)
最终结果是通过listItem.GetFormattedValue()获得的时间字段上的字符串表示(至少在我的情况下)是不正确的,是本地时间+(本地时间 - UTC).
有没有人遇到与SPListItem.GetFormattedValue()相同的问题,你的解决方法是什么?
我想知道我是否遗漏了什么.这是我将如何做到的:对于SPFolder,我会更改关联项目的权限(SPFolder.Item).所以我认为管理SPFolder权限归结为管理SPListItem权限.对于SPListItem,我将破坏角色继承,SPListItem.BreakRoleInheritance()然后使用RoleAssignments集合添加和删除角色.
我想知道RoleAssignments是否是管理SPListItem权限(除了继承)的唯一方法,并且有一种方法可以管理没有角色的个人权限.还有EffectiveBasePermissions属性,但我不确定.
所以问题是除了RoleAssignments集合之外还有其他方法(除了继承)来管理SPListItem权限吗?
@Edit:还有AllRolesForCurrentUser,但我想你可以从RoleAssignments属性获得相同的信息,所以这个只是为了方便.
@Edit:正如Flo在回答中指出的那样,设置存在问题
folder.ParentWeb.AllowUnsafeUpdates = true;
Run Code Online (Sandbox Code Playgroud)
并使用BreakRoleInheritance带有'false'的参数(即没有复制父对象的权限).
folder.Item.BreakRoleInheritance(false);
Run Code Online (Sandbox Code Playgroud)
BreakRoleInheritance在允许不安全的更新之后,您将无法按照GET请求进行操作.据推测,该方法重置AllowUnsafeUpdates为"假".
我知道的一个解决方法是在BreakRoleInheritance(true)之后手动删除继承的权限,如下所示:
folder.Item.BreakRoleInheritance(false);
while(folder.Item.RoleAssignments.Count > 0) {
folder.Item.RoleAssignments.Remove(0);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在查看一个场景,我有一个离线清晰的案例视图,我在这个视图中修改文件清除我修改的文件的只读属性(劫持)然后几天后我在线查看视图,需要得到我的离线更改到流中.
我要做的是检查被劫持的文件并重新检入(必要时合并).
以这种方式工作总是安全的吗?
是否有可能在添加我的更改时,我会意外地覆盖其他人在离线工作时所做的更改?有关如何离线使用ClearCase的任何建议?
谢谢!
(我问,因为一个大学说这种离线工作方式可能会导致覆盖其他人的更改,特别是在离线工作一段时间后更新一个视图,然后将被劫持的文件转换为结帐时.他说它不会事件建议在某些情况下进行合并,只需用劫持文件的内容完全覆盖正在转换的元素的内容)
我正在尝试编写这个简单的测试:
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var postProcessingAction = fixture.Freeze<Mock<IPostProcessingAction>>();
var postProcessor = fixture.Freeze<PostProcessor>();
postProcessor.Process("", "");
postProcessingAction.Verify(action => action.Do());
Run Code Online (Sandbox Code Playgroud)
该Verify检查失败.
postProcessor.Process的代码是
public void Process(string resultFilePath, string jobId)
{
IPostProcessingAction postProcessingAction =
postProcessingActionReader
.CreatePostProcessingActionFromJobResultXml(resultFilePath);
postProcessingAction.Do();
}
Run Code Online (Sandbox Code Playgroud)
postProcessingActionReader 是通过构造函数初始化的接口字段.
我期待测试通过,但它失败,事实证明IPostProessingAction从CreatePostProcessingActionFromJobResultXml方法返回的实例与返回的实例不同fixture.Freeze<>.
我的期望是,在冻结这个Mock对象后,它会IPostProcessingAction在所需的每个地方注入接口的底层模拟,并使所有模拟方法返回IPostProcessingAction返回同一个对象.
我对mock方法的返回值的期望不正确吗?有没有办法改变这种行为,以便模拟方法返回相同的冻结实例?
用户配置文件是否适合存储在选定的自定义网格用户中每页的项目数等内容?(我可以将它存储在视图中,但不是每个用户都这样).
我的第一个问题是将这些设置存储在用户配置文件中,但是以编程方式创建用户配置文件属性的访问权限存在问题,要么必须在SSP中为每个用户提供"管理员用户配置文件"权限,要么必须运行应用程序域用户下的池,而不是NETWORK SERVICE.这两种情况对我来说都是不现实的,所以我现在正在寻找另一种存储这种"每用户"设置的方法.
谢谢!
编辑:我现在正在考虑使用附加数据库来存储用户属性的ASP.NET配置文件机制.
我没有在这里进行太多的研究,但直观的事情是行不通的:
private void SerachButton1_Click(object sender, EventArgs e)
{
String serchTerm = searchTerm1.Text;
String text = usualTextBox.Text;
Int32 index = text.IndexOf(serchTerm);
if (index >= 0)
{
usualTextBox.Select(index, serchTerm.Length);
}
}
Run Code Online (Sandbox Code Playgroud)
SelectedText,SelectionLength和SelectionStart属性是我所期望的后Select调用,但没有可见的选择.
我在这做错了什么?
编辑:我也试过了RichTextBox.当我为其显示的选项设置背景和文本颜色时,但是当您手动选择文本的其他部分或只是单击文本中的位置时,它不会自动取消选择.这两种类型的选择本质上是不同的,如果您以编程方式选择,您还必须以编程方式取消选择吗?
我认为没有明确的答案,所以你如何处理调试这个问题?:
我的主要应用程序(MicroStation插件)使用SHDocVw.InternetExplorer COM包装器启动IE,与其交互,在未使用时隐藏它(例如,当用户关闭窗口并将InternetExplorer.Visible设置为false时拦截).
当主应用程序关闭时,插件通过调用InternetExplorer.Quit来关闭IE,但是iexplore进程仍在运行(在主应用程序关闭时IE被隐藏).
我尝试过的:
有趣的是,我无法重现在同一主应用程序(MicroStation插件)中调用Quit的问题,但主应用程序正在运行时,而不是在退出事件处理代码中.当在其他地方调用时,Quit按预期关闭IE.
否则,InternetExplorer对象对我来说是不透明的.
还有其他方法可以调试此问题吗?
编辑:可能值得注意的是,主应用程序创建UserControl并使IE窗口成为此UserControl的子窗口(使用SetWindowLong更改GWL_STYLE以允许窗口为子窗口,使用SetParent将UserControl设置为父窗口).但是当IE被隐藏时(就在Quit尝试失败时),父窗口被设置为0.
谢谢!