最近我开始随机收到这条消息:
在Visual Studio中找不到元数据文件'...\Release\project.dll'
我有一个包含几个项目的解决方案.当前的构建模式是Debug,所有项目的配置都设置为Debug.但是当我尝试运行主项目时 - 有时它会给我一些错误,所有这些都是"元数据文件'...\Release\projectX.dll'找不到" - 而且,看,它说的是关于RELEASE文件夹,虽然当前模式是Debug.为什么?我试图在所有解决方案文件中搜索"Release\projectX.dll"的引用,我在ResolveAssemblyReference.cache文件中找到了一个.
我通过互联网进行了很好的搜索,发现了一些有类似问题的人,但没有解决方案,或者至少没有可行的解决方案.
我试图删除对这些项目的引用并阅读它们,但有一段时间我又开始重新获得这些错误.
这似乎是个bug.当我总是使用调试模式时,为什么要在Release文件夹中搜索引用的项目?
PS.对于那些遇到这个问题的人:我无法轻易解决它.它重新安装Windows后才消失:(
即使我创建一个干净的WinForms项目,编辑并继续不起作用,并给我错误:
将调试器附加到已在运行的进程或在构建或运行时优化正在调试的代码时,不允许进行更改.
我也在MSDN网站上发现了这篇文章:
不支持的方案
在以下调试方案中,"编辑并继续"不可用:
在Windows 98上进行调试.
混合模式(本机/托管)调试.
SQL调试.
调试Dr. Watson转储.
在未处理的异常之后编辑代码,此时未选中"在未处理的异常上展开调用堆栈"选项.
调试嵌入式运行时应用程序.
使用"附加到"调试应用程序,而不是使用"调试"菜单中的"启动"运行应用程序.
调试优化代码.
目标是64位应用程序时调试托管代码.如果要使用"编辑并继续",则必须将目标设置为x86.("项目属性","编译"选项卡,"高级编译器"设置.).
在由于构建错误而无法构建新版本之后调试旧版本的代码.
但我可以对此列表中的每个项目回答"否".
它以前工作过,但几天前它停止工作,我不知道可能是什么原因.
我表中的一列可以包含没有空格的长文本.如何将宽度限制为150px?我不希望它总是150px(如果它是空的它应该是窄的),但是如果有一个长文本我希望它被限制为150px和要包装的文本.
这是一个测试示例:http://jsfiddle.net/Kh378/(让我们限制第3列).
先感谢您.
更新:
设置此样式:
word-wrap: break-word;
max-width: 150px;
Run Code Online (Sandbox Code Playgroud)
在IE8中不起作用(在不同的计算机上测试),我想它在任何版本的IE中都不起作用.
我听说如果我在没有指定所有者的情况下调用form.ShowDialog(),那么可能会出现我不会在屏幕上看到对话框表单的情况(它将被其他窗口隐藏).这是真的吗?我使用ShowDialog()而没有指定所有者数百次,我从来没有遇到任何问题.
你能解释一下我可以在哪种情况下得到所描述的问题吗?
更新:
好吧,我做了很多实验,使用ShowDialog()时没有任何真正意想不到的问题(没有指定所有者).
所以我认为只是传言ShowDialog()会导致问题.如果您不同意 - 请给我一个代码示例,请导致问题.
知道代码块是否在TransactionScope内的最佳方法是什么?
Transaction.Current是一种可行的方式,还是有任何微妙之处?
是否可以使用反射访问内部ContextData.CurrentData.CurrentScope(在System.Transactions中)?如果有,怎么样?
我们在Visual Studio 2013中有一个数据库项目.在这个项目中,我们有一个生成.sql脚本的.tt文件.问题是在生成之后,生成的文件的构建操作自动设置为Build.如果我们手动将其更改为None,则会在重新生成(运行自定义工具)后重置为Build.
另一个奇怪的事情是,只有当.tt文件在数据库项目中并且在该项目的某个文件夹中(不在root中)时才会发生.如果.tt文件位于另一个项目(任何地方)或数据库项目的根目录中,则生成文件的构建操作在重新生成后不会更改.
我们没有任何Visual Studio加载项,我尝试禁用可能被禁用的所有扩展和更新.
如果需要,我会给你任何细节.
我有一个客户表,其中包含有关我们客户的信息(ID,登录名,姓名,联系信息,不同选项,TS列等,约15列,〜几百个客户).
现在我们需要向我们最大的客户发送每日更新(<10%的客户).我需要存储发送给客户的最新更新的时间戳,所以下次我只发送新的更新(我的意思是在TS大于存储的TS的订单行中更新).
如果我将一个新列"LastUpdatesSentTS"添加到customers表中,那么,据我所知,它将符合规范化规则(如果没有,请提供证明它将破坏规范化的链接).
但是,正如我也知道,从物理数据库设计的角度,最好是创建2列[客户,LastUpdatesSentTS]新表,因为客户只有不到10%的有TS存储的信息.我的意思是,如果我将列添加到customers表 - 大多数客户在该列中将为null.另外,如果我创建一个单独的新表,也许这将是更好地从客户表中删除布尔列"SendUpdates"(因为我将能够了解哪些客户需要更新,通过连接客户表,新表发送).此外,在这种情况下,我担心在几年内我会有一堆非常小的表,当它全部可以在客户表中(没有按照我的理解打破规范化).
简单来说,我看到了两种可能的表格设计:
1)
Table customers:
[CustomerID, Name, ..., SendUpdates, LastUpdatesSentTS]
Run Code Online (Sandbox Code Playgroud)
2)
Table customers:
[CustomerID, Name, ...]
Table customer_updates_sending:
[CustomerID, LastUpdatesSentTS]
Run Code Online (Sandbox Code Playgroud)
你怎么看?
为什么堆栈的高位(在Exception.StackTrace中)会被截断?让我们看一个简单的例子:
public void ExternalMethod()
{
InternalMethod();
}
public void InternalMethod()
{
try
{
throw new Exception();
}
catch(Exception ex)
{
// ex.StackTrace here doesn't contain ExternalMethod()!
}
}
Run Code Online (Sandbox Code Playgroud)
看起来这是"按设计".但这种奇怪设计的原因是什么?它只会使调试变得更复杂,因为在日志消息中我无法理解谁调用了InternalMethod(),而且这些信息通常非常必要.
至于解决方案(对于那些不知道的人),我理解有两种通用解决方案:
1)我们可以记录静态Environment.StackTrace属性,它包含整个堆栈(例如,从hiest级别开始(消息队列) )并以发生异常的最深层方法结束).
2)我们必须捕获并记录最高级别的异常.当我们需要捕获较低级别的异常来做某事时,我们需要重新抛出(在C#中使用"throw"语句)它会进一步提升.
但问题是关于这种设计的原因.
如果你独自工作,你需要一个项目管理系统吗?我的意思是一个项目管理系统,包括问题跟踪,维基等.目前我把我的问题保存在一个非常好的组织软件中,我把项目文档保存在Word文件中(当然我有一个版本控制系统),所以我不是我确实需要一个项目管理软件,因为我独自工作.
我能想到的一件有用的事情,项目管理系统可以另外给我提交链接问题(更新:我发现这个功能非常有用:例如,我现在正在为我的项目的新版本创建文档因此,我打开每个问题的"待发布"状态,然后我阅读了问题的描述,然后我可以快速查看此问题的提交差异 - 这有助于我查看详细信息并编写更好的文档).
另一个 - 分享问题,以便您的用户或您的雇主可以查看或管理它们.
我错过了什么?作为唯一的程序员工作时,项目管理软件是否必要?
更新:我想到了另一个有用的东西:在评论中,我们可以提供一个问题或维基文章的链接,其中包含有关被评论代码的详细信息.
我就直接写这个问题杰弗里里希特,但最后时刻他没有回答我:)所以我会尽量在这里得到你的帮助的答案,球员:)
杰弗里写道,在第9版"CLR via C#"一书中,第108页写道:
void M3() {
Employee e;
e = new Manager();
year = e.GetYearsEmployed();
...
}
Run Code Online (Sandbox Code Playgroud)
M3中的下一行代码调用Employee的非虚拟实例GetYearsEmployed方法.调用非虚拟实例方法时,JIT编译器将查找与用于进行调用的变量类型对应的类型对象.在这种情况下,变量e被定义为Employee.(如果Employee类型没有定义被调用的方法,则JIT编译器将类层次结构向下移向Object以寻找此方法.它可以这样做,因为每个类型对象都有一个引用其基类型的字段;信息未在图中显示.)然后,JIT编译器在类型对象的方法表中查找引用被调用方法的条目,JIT方法(如果需要),然后调用JITted代码.
当我第一次读到这篇文章时,我认为在JIT-ting期间沿着类层次结构寻找方法是没有效果的.在编译阶段很容易找到该方法.但我相信杰弗里.我在另一个论坛上发布了这个信息,另一个人证实了我的疑问,这是奇怪的,并且无效,而且似乎是错误的信息.
实际上,如果您在反编译器中查找相应的IL代码,例如ILDasm或Reflector(我已经检入过),您将看到IL有一个callvirt指令从基类调用该方法,因此JIT不会需要查看方法在运行时所在的类:
public class EmployeeBase
{
public int GetYearsEmployed() { return 1; }
}
public class Employee : EmployeeBase
{
public void SomeOtherMethod() { }
}
public class Manager : Employee
{
public void GenProgressReport() { }
}
...
Employee e;
e = new Manager();
int years = e.GetYearsEmployed();
Run Code Online (Sandbox Code Playgroud)
产生的IL是:
L_0000: nop
L_0001: newobj instance void TestProj.Form1/Manager::.ctor()
L_0006: stloc.0 …Run Code Online (Sandbox Code Playgroud) .net ×5
c# ×4
architecture ×1
clr ×1
css ×1
css-tables ×1
database ×1
debugging ×1
exception ×1
frameworks ×1
html ×1
jit ×1
mysql ×1
redmine ×1
release ×1
sql ×1
sql-server ×1
t4 ×1
trac ×1
winforms ×1