我开发了一个ASP.NET MVC 2网站,现在需要将它部署到我的Web服务器上.我已经克服了一些障碍,因为ASP.NET没有安装等等,但我现在已经到了可以提供普通内容文件的地步,如果我尝试点击我的一个MVC URL,我得到这个:
无法加载文件或程序集'System.Web.Mvc,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.该系统找不到指定的文件.
不足为奇,因为我没有安装MVC2.问题是,我找不到有关如何安装它的任何好信息!
在微软下载中心列出了3个文件,其中没有一个看好:
ASP.NET-MVC-2-RTM-RELEASE-Notes.doc
AspNetMVC2_VS2008.exe
mvc2-ms-pl.zip
该网站并不打算解释文件实际是什么,但我认为最后一个文件是源代码.无论如何,这就是它的样子.发行说明没有任何帮助,因为它们都是关于在开发机器上安装的,实际上EXE的名称清楚地说明了所有关于Visual Studio集成的内容.
那么我该如何实际部署这个糟糕的东西呢?
与Scott Gu的博客相关联的另一个选项是Microsoft Web Platform Installer.现在,我不想安装不仅仅是MVC2,而且我已经安装了IIS等,所以这看起来有点沉重.但这都是学术性的,因为它拒绝在我的服务器上运行,说"你的系统不受支持"或者说是这样的话.(服务器是Windows Server 2008 Standard SP2,所以我真的不知道它的问题是什么).
救命!
[荒谬的是,这应该是如此艰难 - 或者根本不是很难,但肯定是一个保守的秘密!]
我已经让ELMAH在我的(Cassini)开发服务器上工作了,并且非常满意它,但是现在我正试图将所有东西都移到我的生产服务器(IIS7),蜜月看起来就像结束了.
我已经超越了IIS7的"陷阱",坦率地说可以在文档中更好地突出显示,如果我只是使用内存中的日志,那么它可以工作.
但是,我试图让它使用SQL Server日志(就像我在我的开发系统上那样),并且我得到了一个错误:
对象ELMAH_GetErrorsXml上的EXECUTE权限被拒绝
好吧,好吧.我知道如何授予数据库权限,但我真的很难理解我需要授予访问权限的用户和哪些存储过程/表.
让我感到困惑的是,我没有做任何这样的事情让它在我的开发服务器上工作.我能看到的唯一区别是,在我的开发服务器上它似乎连接为NT AUTHORITY\IUSR,而在我的生产服务器上它似乎连接为NT AUTHORITY\NETWORK SERVICE.(它只是使用可信连接,所以我没有明确配置它来做到这一点 - 我认为它与Web服务器有关).更新:我已经确定,因为我正在使用Cassini,它实际上是以我(管理员)而不是IUSR登录,这解释了为什么我没有得到任何权限问题.
在我的开发服务器上,IUSR帐户是公共数据库角色的成员,并且可以访问所需的数据库(再次作为"公共").没有明确授予对象级权限.[见上面的更新 - 这是无关紧要的].
在我的生产服务器上,我以完全相同的方式添加了NETWORK SERVICE(公共数据库角色,显式访问数据库为"public").然而,我得到了这个权限错误.为什么?!![请参阅上面的更新 - 我没有获得权限错误的唯一原因是因为我作为管理员运行].
而且,当然,如果它在本地工作的事实只是"运气",我将需要知道授予访问权限的SP /表.我的猜测是所有3个SP而不是表,但是(再次)看到一些使这个显式的文档会很好.
编辑:底部添加堆栈跟踪.
我有一个ASP.NET MVC 5项目,它通过Entity Framework 6使用SQL Server数据库.
我将Glimpse(和Glimpse.MVC5)添加到项目中,这很好.
但是,当我添加Glimpse.EF6时,我的应用程序一旦尝试访问数据库就会抛出异常.例外是:
System.NotSupportedException
无法确定"System.Data.SqlClient.SqlClientFactory"类型的提供程序工厂的提供程序名称.确保在应用程序配置中安装或注册了ADO.NET提供程序.
这是怎么回事?仅供参考,connectionStrings我的web.config部分如下所示:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.; Initial Catalog=foo; Integrated Security=True; MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
...我的Application_Start方法看起来像这样:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Database.SetInitializer(new WebApplication.Models.Storage.ApplicationDbInitializer());
}
Run Code Online (Sandbox Code Playgroud)
...我的上下文类看起来像这样:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public DbSet<Foo> Foos { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢任何帮助......
堆栈跟踪:
[NotSupportedException: Unable to determine the provider name for provider factory of type 'System.Data.SqlClient.SqlClientFactory'. Make …Run Code Online (Sandbox Code Playgroud) 我有这行代码:
t.ContinueWith(_ => form.Close(),
TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)
...关于编译器有什么要说的:
警告2由于未等待此调用,因此在完成调用之前将继续执行当前方法.考虑将'await'运算符应用于调用的结果.
现在,这不是我写的代码,但我认为它只是在现有任务结束时添加一个延续.我认为它实际上并没有运行任务(或延续).那么仅仅修改任务的过程肯定是同步操作吗?我为什么要await这么做?
我正在使用RestSharp,并使用Json.NET进行序列化(请参阅此处).
Json.NET支持BSON,由于我的一些请求有大量的二进制数据块,我认为这会大大加快我的应用程序.但是,据我所知,RestSharp似乎没有任何内置的BSON支持.
使用Json.NET作为RestSharp的自定义序列化程序实现,因此乍一看它似乎可以修改该自定义序列化程序以使用BSON.但是,接口的Serialize方法RestSharp.Serializers.ISerializer返回string- 这是(我假设)不适合BSON.因此,我假设需要对RestSharp进行一些更重要的更改才能实现此更改.
有没有人想出办法做到这一点?
更新:我查看了RestSharp源代码,发现RestRequest.AddBody接受我的对象并将其序列化到请求体中的方法最终调用Request.AddParameter(使用序列化对象数据和参数类型RequestBody).
我想我可能能够将我的对象序列化为BSON,然后Request.AddParameter直接调用- 事实上我可以.但是,当RestSharp然后执行时RestRequest,它无法将二进制内容放入请求中,因为有关于请求内容的其他嵌入式假设是UTF-8编码的.
因此看起来这个hack不起作用 - 需要对RestSharp本身进行一些更改,而且我不是那个工作的人......
更新2:我决定使用调试器来计算我需要更改多少RestSharp以克服正文编码问题,所以我换掉了我的NuGet版本的RestSharp并将RestSharp项目包含在我的解.而且......它奏效了.
事实证明,在过去的几个月里,RestSharp已经发生了变化,而NuGet版本还没有.
因此,您现在可以使用AddParameter并传入已经BSON编码的对象,而RestSharp会将其发送到服务器而不会抱怨.
我很难让Bootstrap的按钮插件在我的MVC视图中工作.我正在使用最新的NuGet版本的ASP.NET MVC(5.1 rc1)和Bootstrap(3.03).
我在视图中有以下内容(现在我已经将它简化为手工编码的HTML而不是使用Html.EditorFor(),以试图让它工作):
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true)
<div class="row">
<div class="col-lg-6">
<div class="input-group">
<input type="text" class="form-control" />
<span class="input-group-btn">
<button class="btn btn-default" type="button">Go!</button>
</span>
</div>
</div>
<div class="col-lg-6">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这会生成以下HTML:
<form action="xxx" method="post">
<input name="__RequestVerificationToken" type="hidden" value="T3k..." />
<div class="form-horizontal">
<div class="row">
<div class="col-lg-6">
<div class="input-group">
<input type="text" class="form-control" />
<span class="input-group-btn">
<button class="btn btn-default" type="button">Go!</button>
</span>
</div>
</div>
<div class="col-lg-6">
</div>
</div>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
问题是,当它在浏览器(Chrome 32/IE 11)中显示时,输入框和按钮之间存在很大差距.像这样:
如果我将 …
我希望能够通过加载项本身的一些 VBA 代码访问 PowerPoint 加载项文件(保存为“PowerPoint 加载项 (*.ppa)”的演示文稿)的文档属性。
如果它有助于理解问题,我实际尝试做的是读取存储加载项版本号的自定义文档属性,以便我可以在对话框中显示它。
在 Word 和 Excel 中,我可以使用ThisDocument&执行此操作ThisWorkbook,它们都返回对包含正在运行的代码的文档的引用。但是,ThisPresentationPowerPoint 中没有等效项。
对于标准的 PowerPoint 演示文稿或模板,我可以使用ActivePresentation. 但是,此方法不适用于加载项。
有任何想法吗?拜托,没有关于我应该在哪里贴版本号的建议:-)
我有一个网络应用程序,允许客户端一次请求多个图像缩略图。当前,响应作为 JSON 编码的对象列表发送,其中每个对象都包含(编码的)图像数据。(我使用的是 JSON.NET;看起来它将图像数据编码为 base64 字符串)。
如果我更改我的应用程序,使图像数据与 JSON 对象分开发送,作为“二进制”(应用程序/八位字节流)内容,这会更有效吗?
或者更简单地说,应用程序/八位字节流是否是比 Base64 更紧凑的编码?
另外,这与 image/jpeg 有什么不同?
在PowerPoint 2010或Word 2010中,当我选择"插入" - >"图表"时,它会创建一个带有Excel工作表的新图表.
如果我将一个宏添加到Excel工作表,当我关闭工作表并重新打开它时,这似乎被丢弃了.
但是,它是可能有宏的图表,因为我也有一些Word文档和我在Office 2003中,它已经嵌入Excel图表与宏创建PowerPoint演示文稿.当我将它们转换为Office 2010时,它们看起来就像"普通"Office 2010图表,但宏保留了下来.
在我看来,当您选择插入时创建的嵌入式图表 - >图表是"pptx"格式而不是"pptm"格式,因此不会保存宏.
(如果我查询ActiveWorkbook.FileFormat,我得到"51",这是"Open Xml Spreadsheet";这确实是"pptx",而不是"用Mac打开Xml电子表格",即"52").
如何插入带有"pptm"行为的图表?或者改变现有图表的行为?
注意:我不想插入图表"对象",因为这意味着图表在主机应用程序中不可编辑(它只是插入一个需要"打开"以便编辑它的Excel图表).
让我先行一步......我可以通过以下方法实现我想要的目标:
现在您有一个"本机"Word或PowerPoint 2010图表,您可以直接在Word或PowerPoint中编辑它.如果单击图表并选择图表工具 - >设计 - >编辑数据,则打开的Excel工作表将包含您在步骤4中创建的宏.成功!
现在,有没有人有更简单的方法?
我以为Linq GroupBy总是会产生唯一的键,但是当我将a的结果投影GroupBy到Dictionaryusing中时.ToDictionary(),我收到一条错误消息,说“已经添加了具有相同键的项”:
这是有问题的代码:
return DbContext.Responsibilities
.GroupBy(r => r.RoleCode)
.ToDictionary(g => g.Key, g => g.Count());
Run Code Online (Sandbox Code Playgroud)
[这里Responsibilities是一个DbSet实体,其RoleCode成员是简单int属性。]
如果我将其更改为产生一系列匿名类型,然后从中创建字典,则该字典将运行而不会出错:
return DbContext.Responsibilities
.GroupBy(r => r.RoleCode)
.Select(g => new { Code = g.Key, Count = g.Count() })
.ToDictionary(i => i.Code, i => i.Count);
Run Code Online (Sandbox Code Playgroud)
为什么会有如此不同?
仅供参考,如果我创建一个临时List变量来保存匿名类型,则值如下:
因此,没有重复的密钥。