我刚刚将包含WinForms,通用库和Web应用程序的VS 2008解决方案升级到VS 2010,但所有项目仍然针对.NET 3.5 SP 1.我使用此技术为我的常用库生成XmlSerializers.WinForms应用程序运行正常.当我的Web应用程序尝试使用引用相同XmlSerializers的这些库运行时,它会抛出以下内容:
'/ WebSubscribers'应用程序中的服务器错误.无法加载文件或程序集"Ceoimage.Basecamp.XmlSerializers"或其依赖项之一.此程序集由比当前加载的运行时更新的运行时构建,无法加载.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.BadImageFormatException:无法加载文件或程序集"Ceoimage.Basecamp.XmlSerializers"或其依赖项之一.此程序集由比当前加载的运行时更新的运行时构建,无法加载.
我已经使用.NET Reflector查看了XmlSerializer的引用,并看到它引用了2.0和4.0版本mscorlib以及3.5和4.0版本System.Data.Linq.奇怪的是,它只使用4.0版本System.Xml.那可能是我的问题.
如何使用这些XmlSerializers运行Web应用程序?当我简单地删除那些XmlSerializers时,Web应用程序运行正常.这是一个选项,但是如何强制MSBUILD为特定版本的CLR创建序列化程序?
这是我添加到项目文件的MSBuild任务,它强制创建XmlSerializers:
<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
<Delete Files="$(TargetDir)$(TargetName).XmlSerializers.dll" ContinueOnError="true" />
<SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
<Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
</SGen>
</Target>
Run Code Online (Sandbox Code Playgroud) msbuild sgen visual-studio-2010 .net-reflector xmlserializer
我有一个带有字符串属性的类,同时具有getter和setter,它通常很长,以至于PropertyGrid会截断字符串值.如何强制PropertyGrid显示省略号,然后启动包含多行文本框的对话框以便于编辑属性?我知道我可能要在属性上设置某种属性,但属性和方法是什么?我的对话框是否必须实现一些特殊的设计器界面?
更新: 这可能是我的问题的答案,但我无法通过搜索找到它.我的问题更为通用,其答案可用于构建任何类型的自定义编辑器.
我最近为我的雇主获得了代码签名证书,但我不是InstallShield开发人员,他将在分发之前签署二进制文件.我知道我可以将证书与其私钥一起导出,但是我在哪里存储它以便InstallShield开发人员可以将其安装在他的机器上?一旦我把它交给签字的人,我应该把它从机器上取下来吗?我在哪里存储主副本?显然,源代码控制并不是最好的地方,除非我在SVN中锁定该目录.
我们有一个.NET应用程序,它使用不同DLL中的COM对象,也用于我们应用程序的VB6部分.在引用COM库时,Visual Studio 2012会创建一个Interop.x.DLL并引用它.我应该从构建计算机分发Interop.x.DLL还是使用某些.NET命令行工具重新生成它?什么工具?部署引用COM的.NET应用程序的最佳实践是什么?
我最近更新了一个从.NET 3.5到.NET 4.0的WinForms应用程序,其中包含本地报告.我包括11.0版组件的Microsoft.ReportViewer.WinForms,Microsoft.ReportViewer.Common和Microsoft.ReportViewer.ProcessingObjectModel应用程序目录,这是所有花了部署使用.net 3.5这个程序,但我得到一个目标计算机上,.NET 4.0,但没有VisualStudio中或SQL Server上出现以下错误:
TYPE: Microsoft.Reporting.WinForms.LocalProcessingException
MSG: An error occurred during local report processing.
SOURCE: Microsoft.ReportViewer.WinForms
SITE: EnsureExecutionSession
at Microsoft.Reporting.WinForms.LocalReport.EnsureExecutionSession()
at Microsoft.Reporting.WinForms.LocalReport.SetParameters(IEnumerable`1 parameters)
at Ceoimage.Basecamp.MaintainDocumentIntegrity.ReportContainer._SetReportParameters(String departmentName, String footer)
at Ceoimage.Basecamp.MaintainDocumentIntegrity.ReportContainer._RefreshReport(DataTable sourceTable, String sourceName, String reportResourceName, String departmentName, String footer)
at Ceoimage.Basecamp.MaintainDocumentIntegrity.ReportContainer.ShowMissingReport(MissingFilesDataTable missingTable, String departmentName, String footer)
at Ceoimage.Basecamp.MaintainDocumentIntegrity.DocumentIntegrityForm._HandleMissingComplete(Object sender, RunWorkerCompletedEventArgs e)
-- INNER EXCEPTION --
TYPE: Microsoft.Reporting.DefinitionInvalidException
MSG: The definition of the report '' is invalid.
SOURCE: Microsoft.ReportViewer.Common
SITE: CompileReport
at Microsoft.Reporting.ReportCompiler.CompileReport(ICatalogItemContext …Run Code Online (Sandbox Code Playgroud) 大家好,
我们有一个.Net 2.0应用程序,它有一个MySQL后端.我们希望能够在安装应用程序时部署MySQl和数据库,并尝试找到最佳解决方案.当前设置是将所需文件复制到本地计算机上的文件夹,然后执行"NET START"命令以安装和启动mysql服务.然后我们使用bat文件将DB的备份恢复到这个新创建的mysql实例.它根本不是一个理想的解决方案,我试图提出更强大的东西.
问题是Vista上的用户权限,以及安装和启动服务的各种小事.它太脆弱而不可靠,或者至少它在我测试它时会出现这种情况.这是一个客户端/服务器类型设置,所以我们只需要为每个办公室安装一个服务器,但我想确保尽可能轻松,并尽可能少的屏幕.
你会怎么做?
昨天我接到了微软代表的电话,询问我们是否提供"托管解决方案",可能是大型Windows Azure推送的一部分.我一接到电话,我们的营销总监就来到我的办公室,并表示我们的大多数客户都要求在下一版本中集成Active Directory.然后我想到:如果应用程序不在客户的网络上,那么如何在"托管解决方案"中使用Active Directory?
作为一个关于Active Directory集成的更一般的问题,通常对应用程序有什么样的功能变化?这是表示用户只是通过向Active Directory进行身份验证来登录应用程序,还是表示应用程序从Active Directory获取其用户列表,或者是否在应用程序中创建新用户或组在Active Directory中创建新用户或组?
我刚陷入流行语战争的交火中吗?
我有一个SQL文件作为嵌入式资源添加到我的VS.NET 2008项目中.每当我使用以下代码读取文件的内容时,返回的字符串总是以三个垃圾字符开头,然后是我期望的文本.我认为这与我正在使用的Encoding.Default有关,但这只是猜测.为什么这个文字会一直显示出来?我应该只删除前三个字符还是有更明智的方法?
public string GetUpdateRestoreSchemaScript()
{
var type = GetType();
var a = Assembly.GetAssembly(type);
var script = "UpdateRestoreSchema.sql";
var resourceName = String.Concat(type.Namespace, ".", script);
using(Stream stream = a.GetManifestResourceStream(resourceName))
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
// UPDATE: Should be Encoding.UTF8
return Encoding.Default.GetString(buffer);
}
}
Run Code Online (Sandbox Code Playgroud)
更新: 我现在知道,如果我只是更改最后一行以返回UTF-8编码的字符串,我的代码将按预期工作.这个嵌入式文件总是如此,但它总是如此吗?有没有办法测试任何缓冲区来确定其编码?
我们开发了一个企业应用程序,我们需要记录以下目标部署的最低硬件要求:
我们抛出的一些想法包括将要求基于我们的测试环境,基于每个目标组件的最高规格要求,以及基于当前可用硬件的规格.
你如何提出你的硬件规格?
在.NET 3.5上使用NUnit 2.2时,使用DateTime.Equals时,以下测试失败.为什么?
[TestFixture]
public class AttributeValueModelTest
{
public class HasDate
{
public DateTime? DateValue
{
get
{
DateTime value;
return DateTime.TryParse(ObjectValue.ToString(), out value) ? value : new DateTime?();
}
}
public object ObjectValue { get; set; }
}
[Test]
public void TwoDates()
{
DateTime actual = DateTime.Now;
var date = new HasDate {ObjectValue = actual};
Assert.IsTrue(date.DateValue.Value.Equals(actual));
}
}
Run Code Online (Sandbox Code Playgroud) .net ×3
deployment ×3
c# ×2
.net-3.5 ×1
.net-4.0 ×1
attributes ×1
azure ×1
certificate ×1
code-signing ×1
com-interop ×1
database ×1
datetime ×1
encoding ×1
hardware ×1
hosted ×1
installation ×1
msbuild ×1
mysql ×1
nunit ×1
propertygrid ×1
reportviewer ×1
resources ×1
sgen ×1
svn ×1
unit-testing ×1
vb6 ×1
winforms ×1