我正在使用XSLT处理我的ASP.Net web.config文件以插入一些额外的log4net配置.它由NANT标准任务应用<style>
.在成功插入新内容的同时,它会将许多自动关闭标记转换为空配对标记.例如,部分web.config在此之前如下所示:
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<appSettings>
<add key="SomeKey" value="SomeValue"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
应用样式表后,<section>
和<add>
标签(以及所有其他标签)不再自动关闭:
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net">
</section>
</configSections>
<appSettings>
<add key="SomeKey" value="SomeValue">
</add>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
我的样式表看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<!-- This stylesheet is applied to web.config files to insert log4net appender
filters that will prevent logging messages resulting from pages requested by
AIS monitoring systems. -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes" />
<xsl:preserve-space …
Run Code Online (Sandbox Code Playgroud) 我正在使用.Net 4.0中的图表库创建一个包含多个系列的堆积柱形图.我的目标是一个直方图,显示几个系列(教师)每天的累计行动次数(报告完成次数).通常缺少数据(特定教师当天没有活动).
当系列中缺少数据时,我会在条形图中出现间隙:
我的代码:
public ActionResult CompletionHistogram(int sid, int width, int height)
{
Site site = SiteRepository.Get(sid);
if (site == null)
return new HttpNotFoundResult();
Chart chart = new Chart();
chart.Height = height;
chart.Width = width;
ChartArea area = chart.ChartAreas.Add("Default");
// Treat each teacher as a series
foreach (Teacher t in site.Teachers)
{
Series series = chart.Series.Add(t.FullName);
series.ChartType = SeriesChartType.StackedColumn;
series.Name = t.FullName;
// Group completions by day (filter out incomplete reports and null timestamps)
var groups = t.StudentReports
.Where<StudentReport>(rep => …
Run Code Online (Sandbox Code Playgroud) 我Teacher
和之间有亲子关系StudentReport
.StudentReport
当教师完成报告时,每个都有一个时间戳字段.我有一个查询,要查找截至几分钟前已完成一份或多份报告的所有教师:
public IList<Teacher> FindRecentlyActiveTeachers(int intervalMinutes)
{
if (intervalMinutes <= 0)
throw new ArgumentException("Interval must be a positive number of minutes");
DateTime activityCutoff = DateTime.Now.AddMinutes(-1 * intervalMinutes);
return Session.QueryOver<Teacher>()
.Left.JoinQueryOver<StudentReport>(t => t.StudentReports)
.Where(r => r.FirstSaveTimestamp >= activityCutoff)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Teacher>();
}
Run Code Online (Sandbox Code Playgroud)
这将返回正确的教师列表,但每位教师的子集合仅包含与选择条件匹配的报告.我希望每个匹配教师的报告集合包含所有报告,而不仅仅是符合条件的少数报告.
有没有什么方法可以热切地加载完整的子集合,或者省略在此查询中加载它并依赖于延迟加载它?
更新
这是解决方案:
return Session.QueryOver<Teacher>()
.Fetch(t => t.StudentReports).Eager
.JoinQueryOver<StudentReport>(t => t.StudentReports)
.Where(r => r.FirstSaveTimestamp >= activityCutoff)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Teacher>();
Run Code Online (Sandbox Code Playgroud) 我在MVC 3 Web应用程序中使用NHibernate将来的查询,并试图在我的控制器中保持所有数据库访问,而不是在我的视图中.该站点是资源(描述性模糊)的目录,其具有多对多的成绩集合以及多对多的主题集合.用户选择一个或多个成绩,以及一个或多个主题,然后获取匹配资源的列表.
为了填充搜索表单,我正在使用将来的查询来获取所有成绩和主题:
public Domain.SearchFormData GetSearchFormData()
{
// Get all grades and all topics using a multiquery.
IEnumerable<Grade> grades = Session.QueryOver<Grade>()
.Future();
IEnumerable<Topic> topics = Session.QueryOver<Topic>()
.Future();
var result = new SearchFormData();
result.Grades = grades;
result.Topics = topics;
return result;
}
Run Code Online (Sandbox Code Playgroud)
这很简单,工作正常,并返回SearchFormData
一个简单的DTO.此查询在控制器中执行,结果不需要任何进一步处理,因此它会直接传递到视图中以呈现为复选框列表.
但是由于未来查询的延迟执行,在视图开始迭代列表之前不会触发数据库访问.一些人(如NHibernate Profiler)认为这是一个禁忌,他们说,在视图开始渲染时,应该完成所有数据库访问.主要原因是,如果不这样做,很容易隐藏SELECT N + 1.
这不适用; 等级和主题都是没有集合的简单对象.我不介意该视图将触发数据库访问.但它让我寻找一种干净,清晰的方式来触发所有未来的查询.一种方法是访问结果,例如将其复制IEnumerable
到列表中.但那不是我需要做的事情; 我只想执行排队查询.
我认为触发器在上面的查询之外发生是有意义的.我可能需要其他数据来呈现整个页面视图,我可能正在使用其他未来的查询来获取它.例如,主页还可能显示五个最受欢迎的资源和资源总数.然后控制器将调用多个方法来累积视图所需的内容,并且最有效的是一次执行所有这些方法.当然,人们做这种方式是扩大我GetSearchFormData
进入GetAllHomePageData
并与Home的页面上的所有字段返回DTO.但我使用搜索表单,而不仅仅是在主页上.所以我会以这种方式失去一些很好的模块化.
我使用IIS Express作为我的Visual Studio 2012开发Web服务器.我希望能够通过无线设备(智能手机,平板电脑等)访问我的网站进行测试和调试.无线设备与工作站位于不同的LAN上,不属于我的Windows AD.由于办公室局域网的设置方式,他们无法通过主机名解析我的工作站; 他们必须使用IP地址.
为了能够通过非本地主机URL访问IIS Express,我必须在applicationhost.config中更改其配置以添加使用该IP地址的绑定,然后用于netsh http add urlacl...
进行URL保留.
如果我使用预留中的IP地址和applicationhost.config,我可以使它正常工作.但IP地址偶尔也会发生变化.有没有办法使用通配符语法,因此它适用于任何IP地址?我试过这些:
netsh http add urlacl url=http://+:49197/ user=everyone
和
netsh http add urlacl url=http://*:49197/ user=everyone
但是,当我尝试启动IIS Express时,它抱怨它无法启动,因为访问被拒绝.
什么是正确的语法?
我们遇到了看似常见的错误
Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Run Code Online (Sandbox Code Playgroud)
在一个需要针对.Net 4.0进行编译的项目中,它是在运行Windows Server 2012的构建服务器(带.Net 4.5)上构建的.该项目是一个Web应用程序,可部署到运行2003的Web服务器,其中安装.Net 4.5不是一个选项.在那里它运行"经典".Net 4.0
从类似的问题,我们正在尝试MSBuild的命令行选项:
/property:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
Run Code Online (Sandbox Code Playgroud)
我们也尝试了各种组合
/property:ReferencePath="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
/property:NoStdLib=true
/property:NoCompilerStandardLib=true
Run Code Online (Sandbox Code Playgroud)
实际上,引用程序集(包括.dll文件)安装在构建服务器上的那个位置.但是当我们部署网站并访问主页时,我们会收到该错误.(有趣的是,在页面重新加载时,错误消失,并且站点正常运行.)针对.Net 4.0程序集编译所需的MSBuild参数是什么?
更新 我打开MSBuild上的荒谬级别日志记录,我看到它显然是针对.Net 4.0参考程序集构建的:
Resolved file path is "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
Run Code Online (Sandbox Code Playgroud)
我没有看到任何提及该文件夹或构建服务器的工作目录之外的程序集.因此它似乎可以正确编译,但是当部署在Web服务器上时,它会抛出异常.
至于在页面重新加载时异常消失,我想知道这是否与标记预编译步骤有关.我们在构建服务器上运行aspnet_compile.也许如果生成的程序集有异常,Web服务器将重新编译它.重新编译的程序集很好,因为它是用真正的.Net 4.0创建的.
我是MVC(我使用的是ver.3)和Sharp Architecture的新手,我很难弄清楚如何使用自定义模型绑定器.
我有一个名为的域对象(不是视图模型)Teacher
,以及ITeacherRepository
标准Sharp Architecture方式完成的存储库.我注册这条路线:
routes.MapRoute(
"Teacher",
"Teacher/{tid}/{action}",
new { controller = "Teacher", action = "Index" });
Run Code Online (Sandbox Code Playgroud)
和看起来像这样的Index
方法TeacherController
:
public ActionResult Index(int tid)
{
Teacher t = TeacherRepository.Get(tid);
if (t == null)
throw new InvalidOperationException("No such teacher");
TeacherDisplay display = new TeacherDisplay(t);
return View("Index", display);
}
Run Code Online (Sandbox Code Playgroud)
一切正常.现在我想采取下一步,并实现自定义模型绑定器,Teacher
因此控制器方法可能如下所示:
public ActionResult Index(Teacher t)
{
if (t == null)
throw new InvalidOperationException("No such teacher");
TeacherDisplay display = new TeacherDisplay(t);
return View("Index", display);
}
Run Code Online (Sandbox Code Playgroud)
我写了一个原始模型绑定器:
public …
Run Code Online (Sandbox Code Playgroud) .net-4.0 ×2
asp.net-mvc ×2
nhibernate ×2
.net-4.5 ×1
iis-express ×1
msbuild ×1
mschart ×1
netsh ×1
xslt ×1