自上周的安全更新以来,我们在VS2010中构建了一个旧的ASP.NET MVC 3 Web应用程序,无法编译.
问题是对System.Web.Mvc.dll的引用被破坏.
当我在我的构建机器上打开解决方案文件时,安全更新尚未运行,并打开References-> System.Web.MVC的属性对话框,它看起来很好.
路径是C:\ Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll版本是3.0.0.0
但是当我在运行安全更新的开发机器上打开解决方案文件时,References-> System.Web.MVC被标记为缺失.如果我删除它,并尝试使用VS2010的"添加引用"对话框将其添加回来,则不会显示.
在网上闲逛让我得到了使用NuGet更新MVC的建议.在我们的VS2010项目中,我们没有使用NuGet,因此对于这种情况看起来似乎不太正确.无论如何我试了一下,最后还有六个丢失的参考文献.
当我在Windows资源管理器中查看"C:\ Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll"的属性时,在构建计算机上,我看到版本3.0.0.0.
当我查看开发机器上的属性时,我看到版本3.0.50813.1.
我需要的是一种改变我构建和运行方式的方法,这样我就可以构建和运行.NET 3.0框架中安装的这两个DLL中的哪一个.
想法?
第一次尝试 - 如果组件丢失,请添加它.我删除了旧的遗失参考.然后我将DLL从"ASP.NET MVC3\Assemblies"文件夹复制到我项目的文件夹中.将其设置为"始终复制",并将其添加为参考.
有了这个,该项目将在VS2010中编译,但是当我尝试使用aspnet_compiler预编译页面时,我收到了警告:
(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经设法避免了解运行时策略,但我尝试在web.config中添加它:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
再次尝试,并得到相同的警告.
我的问题是 - 我还有问题吗?或者我会解决它,尽管有警告?
我见过其他支持分组条形图的javascript图表库,如下图所示.我没有在chart.js的在线编辑器中看到这是一个明确的选项.
是否可以在chart.js中进行此类分组条形图?这简单吗?在他们的在线编辑器中是否有模板?

我正在尝试追踪z-index问题.我正在查看IE9的DOM Inspector中的页面,我无法弄明白.
我有一个z-index为10000的元素,另一个z-index为7000,但z-index 10000是在z-index 7000之下绘制的.显然在层次结构的某个地方,有些东西正在设置堆栈上下文,但我一直在层次结构中浏览,我一直无法找到它.
除了这两个元素,我所能看到的只有一个z-index集.而且没有任何不透明度值设置.我在FF5和IE9中看到了这一点,所以它不是旧的IE <7堆叠上下文错误.
任何浏览器都有一个工具可以告诉我哪个元素正在设置堆叠上下文?
谢谢.
我的页面有一些需要在页面加载时运行的javascript.所述javascript需要找到ServerControl的客户端组件,它与$ find()一起使用.
当然,如果我直接将代码发送到页面上,它会在页面被读取时执行,并且因为它所依赖的任何内容尚未初始化而失败.
如果我将我的代码放在pageLoad()函数中,它运行得很好,因为asp.net会自动为任何名为pageLoad()的函数连接onload处理程序.问题是我真的不喜欢pageLoad()解决方案 - 主要是因为它是一个单一的全局名称.如果我使用pageLoad()提交一些代码,我只知道其他一些程序员将要复制该方法,在某个地方不合适,我们最终会得到一个包含两个或更多不同pageLoad()函数的页面,并且结果将是一堆神秘的错误,将永远追查.
所以,我把我的代码放在一个传递给jquery的$(document).ready()的匿名函数中.这失败了,因为它在ServerControl的客户端组件存在之前运行.
所以,我把我的代码放在Sys.Application.add_load()传递给的匿名函数中.这也失败了,因为系统未定义.
所以我最终决定将我的代码放在Sys.Application.add_load()中,然后将它放在$(document).ready()调用的函数中.这样可行,但它几乎与pageLoad()一样令人心痛.
<script type="text/javascript">
$(document).ready(function(){
Sys.Application.add_load(function(){
var component = $find(<clientid>);
if (component) { <do something> }
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
必须有一种更好的方法来处理这个问题.
有任何想法吗?
我有一对父/子关系的表 - 事件和事件详细信息.我有一个viewmodel,包含来自这两个表的信息.我有一个业务层方法,它传递一个需要更新两个表的viewmodel实例.
所以,在这个方法中,我使用EF6的新事务机制:
using (var transaction = this.db.Database.BeginTransaction())
{
try
{
// various database stuff
this.db.SaveChanges();
// more database stuff
this.db.SaveChanges();
// yet more database stuff
this.db.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
this.logger.logException(ex, "Exception caught in transaction, rolling back");
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题.我该如何测试?
我正在使用微软的单元测试框架,使用Moq,我在模拟DBContexts和DbSet <>时没有遇到任何麻烦,但我似乎无法弄清楚如何绕过事务的东西.
如果我不尝试模拟事务,我会得到一个InvalidOperationException:
"在应用程序配置文件中找不到名为xxx的连接字符串."
这很有道理 - 没有应用程序配置文件,也没有任何数据库.
但是如果我尝试模拟BeginTransaction(),我会得到初始化错误:NotSupportedException:
"非虚拟成员的设置无效:m => m.Database.BeginTransaction".
这让我追逐杂草,看着.NET方法的反编译,试图找出一些可能来自可用接口的类,或者某些东西,我可以以某种方式注入一个模拟对象.
我不是要对MS的事务代码进行单元测试 - 我只是想确保对每个表中的相应记录进行适当的更改.但就其而言,它看起来像是不可测试的,并且任何使用事务的方法都是不可测试的.这只是一种痛苦.
我用Google搜索过,没有发现任何有用的东西.有没有人遇到过这个问题?任何人都有关于如何进行的想法?
我正在写一个客户端到WCF服务.这是一个较大系统中的单个应用程序,包括用C#,C++,VB和Java编写的模块.所有应用程序都共享通用配置和日志记录机制,无论它们使用何种语言编写.
我想弄清楚如何构建客户端应用程序,以便它可以在没有app.config的情况下运行.为什么?因为app.config中的大多数内容都是不允许更改系统管理员的样板,以及应该允许更改系统管理员的设置应该是系统范围的配置,而不是app.config文件中的设置坐在bin目录中.
例如 - 客户端的app.config目前看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="WSHttpBinding_ICourierService">
<security defaultAlgorithmSuite="Default" authenticationMode="SecureConversation"
...
</security>
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Default" writeEncoding="utf-8">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport manualAddressing="false"
...
useDefaultWebProxy="true" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://localhost:57102/MyService.svc"
...
>
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是系统管理员不应该处理的一堆不透明的样板.其中大部分是由Visual Studio插入的.我在文件中做了一个更改 - 我增加了最大尺寸<readerQuotas/>.但这是一个我不希望系统管理员搞砸的变化.除了for,我希望系统管理员在文件中没有别的东西<endpoint address=""/>.
我从系统范围的配置中提取端点地址,并在代码中设置它.此文件中没有任何内容应该是用户可编辑的.
那么,我如何配置东西,以便我不需要它存在?
我可以将它作为资源嵌入到程序集中,并挂钩到app.config加载过程,就像我对所需的DLL一样吗?
是创建代码来配置东西的唯一选择,我使用代码设置端点地址的方式?在代码中创建必要的绑定等?那么,如果给出这些不透明的XML块,我怎么知道要编写什么代码呢?
我正在尝试建立我的第一个Android项目来构建Jenkins.
我正在使用Gradle插件的1.24版本运行Jenkins 1.6.2.在Windows 7 Professional SP1上运行.
我已经在我的构建机器上安装了Android Studio和Java7 JDK,并且通过Android Studio或从命令行运行gradlew.bat时,该软件的检出版本构建得很好.但我无法在Jenkins工作中使Invoke Gradle脚本构建任务正常工作.
配置项目页面上有一对单选按钮:
如果我选择"Invoke Gradle",我会被要求选择"Gradle Version",这是我在Configure System中设置的.
我创建了一个gradle安装,GRADLE_HOME设置为"D:\ Program Files\Android Studio\gradle\gradle-2.2.1".这给了我一个警告,"D:\ Program Files\Android Studio\gradle\gradle-2.2.1不是Jenkins主人的目录...."
当我运行构建时,我收到错误"无法检索Gradle可执行文件".
这可能与抱怨该目录的gradle插件有关.但目录是正确的.我用'/'代替'\'尝试了它,它没有任何区别.
由于那不起作用,我尝试了另一种选择,"使用Gradle Wrapper".有一个复选框:"From Root Build Script Dir".无论我是否检查它,我得到"java.lang.IllegalArgumentException:android.compileSdkVersion is missing!"
我已经设置了JAVA_HOME和ANDROID_HOME,所以这不是问题.
有任何想法吗?
作为后续,我删除了gradle任务,并添加了一个Execute Windows批处理命令任务:
SET ANDROID_HOME=d:\Program Files\Android\sdk
SET JAVA_HOME=d:\Program Files\Java\jdk1.7.0_79
.\gradlew.bat clean
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我仍然得到那个错误.
但是当我从构建机器上的命令行运行这些命令时,它们工作得很好.
从Jenkins运行gradlew.bat时,与从命令行运行它时有什么不同?当我从命令行运行时,Jenkins服务被配置为使用与我登录时相同的用户.我已经尝试显式设置我在命令行中设置的每个环境变量,在Jenkins任务中,我仍然看到错误.
有任何想法吗?
当您从.NET代码接口COM对象时,VS会创建一个带有互操作类的互操作DLL.
例:
你有一个foo.dll实现了一个COM库Foo,它包含了一个COM接口"IBar"的实现.您将foo.dll的引用添加到.NET项目.在/ bin中,您将看到一个Interop.FooLib.dll.在对象浏览器中,您将看到Interop.FooLib,在其下您将看到FooLib,您将看到BarClass,您将在该Bar和IBar下看到Base Types.
在.NET代码中,当声明变量时,可以键入FooLib,而intellisense将为您提供Bar或BarClass()的选项.
根据我的理解,你在变量声明中使用它并不重要,但是它对于它的构造函数非常重要.
也就是说,这两个都应该有效:
FooLib.BarClass theBar = new FooLib.BarClass();
FooLib.Bar theBar = new FooLib.BarClass();
Run Code Online (Sandbox Code Playgroud)
但这不应该奏效:
FooLib.Bar theBar = new FooLib.Bar();
Run Code Online (Sandbox Code Playgroud)
这是问题所在.我们刚刚找到了一个奇怪的错误,其中代码适用于某些客户,并且在我们的开发和测试环境中工作,但是在一个客户站点上工作,结果是使用Bar()构造函数的程序员.
那么,任何人都可以准确地解释两个构造函数Bar()和BarClass()之间的区别吗?
任何人都可以解释为什么Bar()构造函数似乎有效吗?
任何人都可以提供一种方法来确保没有人错误地调用错误的构造函数,而不读取每行代码吗?
- 添加 -
有人提出问题出在我们的COM实施中.这就是我们正在做的事情:
IDL:
[
object,
uuid(...),
dual,
helpstring("IBar Interface"),
pointer_default(unique),
nonextensible
]
interface IBar : IDispatch
{
[id(1), helpstring("method barify")]
HRESULT barify([out, retval] VARIANT_BOOL *rVal);
// ...
};
// ...
[
uuid(...),
version(1.0),
helpstring("Foo 1.0 Type Library")
]
library FooLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
// ...
[
uuid(...),
helpstring("Bar Class")
] …Run Code Online (Sandbox Code Playgroud) 使用Entity Framework 6.0.0,我在关闭事务时看到异常.
我们遇到了对表的并发更改的问题,所以我将它包装在一个事务中,现在我在回滚时遇到了异常.
代码:
public LockInfo getSharedLock(string jobid)
{
using (var myDbContext = new MyDbContext())
{
using (var transaction = myDbContext.Database.BeginTransaction())
{
try
{
this.logger.log("Attempting to get shared lock for {0}", jobid);
var mylocks =
myDbContext.joblocks.Where(j => j.customerid == this.userContext.customerid)
.Where(j => j.jobid == jobid)
.Where(j => j.operatorid == this.userContext.operatorid);
var exclusiveLock = mylocks.FirstOrDefault(
j => j.lockstatus == LockInfo.LockState.Exclusive);
if (exclusiveLock != null)
{
this.logger.log("{0} already had exclusive lock, ignoring", jobid);
return LockInfo.populate(exclusiveLock);
}
var sharedLock = mylocks.FirstOrDefault(
j …Run Code Online (Sandbox Code Playgroud) .net ×3
c# ×3
javascript ×2
android ×1
app-config ×1
asp.net ×1
asp.net-ajax ×1
asp.net-mvc ×1
chart.js ×1
com ×1
gradle ×1
interop ×1
jenkins ×1
jquery ×1
jstree ×1
moq ×1
transactions ×1
unit-testing ×1
wcf ×1
z-index ×1