小编tet*_*ete的帖子

如何在.NET中的引用可执行文件中包含App.config信息?

我有一个可执行项目,比方说A,它是B在运行中启动另一个可执行项目.为了B.exe在A的当前工作文件夹中,我添加B作为A的引用,以便在编译之后将a B.exe复制到A's文件夹中.但是,我注意到我所做的配置B没有在A的文件夹中复制或生成(A仅在's文件夹中没有B.exe.config文件B.exe),因此B没有正确配置跟踪等内容.

我当然可以B.exe.config手动复制到A's文件夹,但我打赌有一些自动方法可以做到这一点.有人能帮助我吗?

.net app-config

6
推荐指数
3
解决办法
2464
查看次数

如何在不使用WPF/MVVM中的依赖项解析器的情况下初始化嵌套的View(和ViewModel)

我正在按照MVVM模式设计一个WPF应用程序.在一个UserControl(实际上这种情况多次发生),因为它非常复杂,例如TabControl,我想将它们分成几个子UserControl.例如,在"主"视图中,我们称之为MainUC,我有一个TabControl,它有两个TabItem.由于两者TabItem实际上都包含许多UI元素,我设计了两个UserControl,SubUCA和SubUCB,因此MainUC的XAML如下所示:

<TabControl Name="mainUC" Grid.Row="0" >   
    <TabItem Header="Sub UC A" Name="SubUC1">
        <local:SubUCA />
    </TabItem>
    <TabItem Header="Sub UC B" Name="SubUC2">
        <local:SubUCB />
    </TabItem>
</TabControl > 
Run Code Online (Sandbox Code Playgroud)

但现在我的问题是:我应该如何为这些安排ViewModel UserControl?我目前使用的一种方法是只有一个ViewModel类(称为MainUC_VM),而DataContextMainUC设置为此类实例(注意我没有使用依赖注入,所以我只是在代码隐藏中创建一个实例of MainUC).但是就这样,MainUC_VM类会变得非常复杂,就像MainUC一样.所以我也想把ViewModel分成几个类.例如,在MainUC_VM类中,我可以拥有这样的属性

public SubUCA_VM SubVM1 { get; set; }
public SubUCB_VM SubVM2 { get; set; }
Run Code Online (Sandbox Code Playgroud)

但是,由于我没有使用依赖注入(因为我们的团队还没决定使用它),我如何才能使DataContextSubVM1和SubVM2分别成为SubUC1和SubUC2?我无法在SubUCA和SubUCB的代码隐藏中实例化一个,因为它们与MainUC_VM中的属性成员不同.

我能想到的一些方法是,1)使SubUCA_VM和SubUCB_VM类单例(这类似于依赖注入的相同行为,例如默认使用MEF),或2)使用EvengAggregator来通知对象的实例化.但在我看来,无论哪种方式似乎都会增加不必要的复杂性.为了使用MVVM,这是否意味着依赖注入几乎是必须的?有没有办法在不使用DI的情况下实现它?

wpf mvvm

6
推荐指数
1
解决办法
1322
查看次数

如何在MSBuild中创建新属性并在WIX中引用它

我们需要创建一个属性来指示我们的软件版本.然后我们想在我们的WIX项目中使用它,即在wxs文件中引用它.我们不想在wxs文件中定义它,因为我们希望MSBuild也根据此版本号重命名输出文件.PropertyGroup中常量的定义对我们来说不是一个合适的地方,原因如下:

PropertyGroup中定义的属性是特定于Configuration/Platform的.每当我们从项目属性窗口在Visual Studio IDE中修改此预处理器时,通常我们只修改特定Configuration/Platform组合的值.(我知道可以在IDE中为All Config/Platform修改它,但它实际上是通过复制到所有组合来完成的.而且我们仍然可以通过修改一个组合的值来破坏同步.例如,默认情况下,当我们打开项目属性窗口的构建选项卡时,它将显示活动的配置/平台).另一方面,即使我们可以在没有任何条件的情况下定义PropertyGroup,每当我们在IDE中修改它时,我们通常只针对特定组合修改它,而不是全部修改它.既然我们在VS IDE中纯粹构建SW,

我试图在BeforeBuild目标中使用MSBuild的CreateProperty任务,但似乎在以下执行中该值根本不会有效.例如,如果我覆盖BeforeBuild中的现有属性,并且当我在WIX中引用它时,它仍将使用旧值.如果我创建一个全新的属性,WIX抱怨未定义的预处理器.

有没有正确的方法:创建一个MSBuild属性并在WIX中使用它?

msbuild wix msbuild-propertygroup

5
推荐指数
2
解决办法
5102
查看次数

启动后,Visual Studio 2012无法打开以前打开的文件

这是VS2010中的默认行为.但是,在我安装VS2012之后,我注意到它没有打开我上次打开的那些文件.虽然在解决方案资源管理器中,它会记住我的最后位置,哪些项目已折叠,但在打开解决方案后,编辑器区域中没有打开任何文件.我无法在opitons中找到这样的设置.任何帮助表示赞赏!

visual-studio-2012

5
推荐指数
1
解决办法
2993
查看次数

BindingExpression(路径)错误是否会影响性能?

我们有一些具有特定数据的派生控件类.并且这些控件还设置数据错误信息并绑定到某些特定属性.例如,如果属性IsNew(提供它存在)为true,则突出显示背景.

现在我想知道,如果我使用这些控件并绑定到一些不公开IsNew这样的属性的对象会怎么样?它会影响Release版本的性能吗?

wpf binding

4
推荐指数
1
解决办法
860
查看次数

WIX安装程序无法从以前安装的Windows安装程序SW升级

我正在为我们的软件创建一个WIX安装程序,现在从以前的Windows Installer打包软件升级时遇到了一些问题.

在问题出现之前,从一个WIX打包的SW升级到另一个WIX打包的SW实际上工作正常,我可以卸载旧版本并安装新版本.当旧版本打包Windows Installer(这是我们当前的解决方案)并且较新版本是WIX打包时,会出现真正的问题.基本上我的WIX安装程序无法找到已安装旧版本的版本,因此将安装较新版本而不卸载旧版本.

如何在WIX安装程序和Windows安装程序之间建立连接:我将WIX的UpgradeCode设置为与Windows安装程序相同.我还在线查看一些示例,他们建议我当前的解决方案应该有效.以下是升级部分的.wxs文件的一部分:

<Upgrade Id="$(var.UpgradeCode)">

  <UpgradeVersion OnlyDetect="yes" Minimum="$(var.VersionNumber)" Property="NEWPRODUCTFOUND" IncludeMinimum="no" />
  <UpgradeVersion OnlyDetect="no" Maximum="$(var.VersionNumber)" Property="UPGRADEFOUND" IncludeMaximum="no" />           
</Upgrade>

<CustomAction Id="PreventDowngrading" Error="A software with newer version number is found on this machine" />        

<InstallUISequence>
  <Custom Action="PreventDowngrading"
          After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallUISequence>    

<InstallExecuteSequence>
  <Custom Action="PreventDowngrading"
      After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
  <RemoveExistingProducts After="InstallFinalize" />   
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

有一点可能值得一提的是我们的SW实际上是Windows服务,我不确定这是否重要.谢谢你的帮助!

windows-installer wix upgrade

3
推荐指数
1
解决办法
551
查看次数

COM注册失败:"自动化错误:系统找不到指定的文件",将dll安装到tlb文件以外的其他文件夹中

我们在VB.NET中开发了一个COM组件(我们称之为MyLib),用于我们的Access应用程序(我们称之为MyApp).为此,我们需要使用生成的MyLib.dll和MyLib.tlb文件进行COM注册.当我将这两个文件安装到MyApp的文件夹中时,一切正常,COM函数被正确调用.但是,当我将dll安装到公共文件夹时,我在标题中提到了错误 - 我这样做的原因是因为我们希望允许在同一台机器上安装不同版本的MyApp.因此,如果COM组件没有改变,我们当然希望在这些不同版本之间共享它,并让Windows执行引用计数.

我不确定我应该将MyLib.tlb文件放在MyApp的安装文件夹中,还是放在与MyLib.dll相同的公共文件夹中.但无论如何,我尝试了两个位置,他们都给出了同样的错误.当我将MyLib.*放入MyApp的文件夹时,以及将MyLib.dll放入公共文件夹的情况下,我尝试比较案例之间的注册表文件.我看不出有任何区别,当然我正在尝试在HKCR\Wow6432nodes\CLSID {MYCLSID}\InprocServer32下注册的类CodeBase.我不明白的另一件事是在两种情况下都没有在HKCR\Wow6432nodes\CLSID {MYCLSID}下名为TypeLib的子键,在我的理解中是将TypeLib链接到dll的方式(但为什么仍然有效)当我把tlb和dll放到同一个文件夹中?)因为在MyApp中它只知道我们通过引用MyLib.tlb添加了一个引用.

我不清楚COM引用究竟是如何为Access应用程序工作的,所以如果我错了,请纠正我.谁能告诉我我做错了什么?注册共享COM dll的正确方法是什么(无论是否将dll和tlb放入共享文件夹)?谢谢!

更新:

关于COM注册,我使用WIX创建Windows安装程序和heat.exe以从dll和tlb文件中获取信息.生成的文件包含Class,ProgID,TypeLib和Registry标记的信息.正如我所提到的,从WIX配置的角度来看,我的两种情况之间的唯一区别是我放置MyLib.dll文件的位置(我假设将MyLib.tlb文件放在MyApp安装文件夹中是正确的方法,请再说一次我的错误),当我将dll和tlb文件放入应用程序的安装文件夹时,它确实有效.这是注册后的一些注册表结构

首先我有HKCR\CLSID\{MYCLSIDs},每个都代表我的COM类之一.在名为"InprocServer32"的子键中,我有Assembly,Class,CodeBase,RuntimeVersion,threadingModel.CodeBase是公共文件夹(不工作)或MyApp的安装文件夹(工作),这是我放置dll的不同位置.我认为在{MYCLSIDs}下会有另一个子键TypeLib,因为Access只能看到TypeLib,我认为应该有一些从TypeLib到实际dll的链接,但是,在这两种情况下,这个子键都丢失但是在第二种情况它仍然有效.有问题吗?

其次我有HKLM\Software\Classes\CLSID\{MYCLSIDs},这个键具有与上述相同的结构.

第三,HKCR\{MYPROGIDs},这些只是我课程的ProgIDs

第四,HKCR\Typelib\{LibID},其中包含来自tlb文件的信息,此ID来自COM组件项目的程序集GUID.

最后,HKEY_CLASSES_ROOT\Interface\{InterfaceID},有名为ProxyStubClsid32的子键,值为{00020424-0000-0000-C000-000000000046},名为TypeLib的子键值为my LibID.

似乎唯一的区别是第一项中的CodeBase(我可能错了,但这就是我所看到的).如果您发现任何问题,请告诉我.谢谢!

第二次更新:

将MyLib.dll安装到共享文件夹后,COM调用失败.但是,如果我将SHARED_FOLDER\MyLib.dll的所有CodeBase值替换为INSTALLDIR\MyLib.dll,并将MyLib.dll复制到INSTALLDIR,它实际上是有效的.反之,在我将MyLib.dll安装到INSTALLDIR(在这种情况下COM正在工作)之后,我将CodeBase值从INSTALLDIR\MyLib.dll更改为SHARED_FOLDER\MyLib.dll,并将副本复制到SHARED_FOLDER,这次它失败了.所以它似乎正是安装位置的问题,这与我对COM的理解相反.我不认为SHARED_FOLDER存在权限问题(我可能错了),因为它位于我的安装程序创建的文件夹中.

com registry wix dllregistration heat

3
推荐指数
1
解决办法
1万
查看次数

WPF ContextMenu 使用 ItemsControl,错误地突出显示整个集合

我需要设计一个ContextMenu包含一个MenuItem,它MenuItem有一个更深层次的菜单列表,它绑定到ObservableCollection我的 ViewModel类型的属性。代码如下所示:

<ContextMenu DataContext="{Binding PlacementTarget.DataContext, 
   RelativeSource={RelativeSource Self}}" >            
   ...                                                                                                                                                     
   <MenuItem Header="Map to account" >
       <ItemsControl ItemsSource="{Binding RelatedAccounts}" >                                        
           <ItemsControl.ItemTemplate>
               <DataTemplate>
                   <MenuItem Header="{Binding Number}" 
                        Command="{Binding PlacementTarget.DataContext.MapToAccountCommand, 
                        RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                        CommandParameter="{Binding}"
                   />                 
               </DataTemplate>
           </ItemsControl.ItemTemplate>                                        
       </ItemsControl>
   </MenuItem>
...
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)

这个想法是当用户从 UI 中右键单击一个支付项目,然后转到“映射到帐户”菜单项时,将显示更深层次的菜单项并列出所有相关帐户供用户选择(如您可以看到ItemsControl绑定到RelatedAccounts)

一切正常,上下文菜单正确显示了我从 ViewModel 公开的所有相关帐户,当用户右键单击一个帐户时,ViewModel 中的Command属性MapToAccountCommand将使用所选帐户的传递参数执行。

但是有一种我不想要的行为:当鼠标进入比“映射到帐户”菜单更深的一层时,它实际上突出显示了整个菜单项集合。请看下面的图片:

在此处输入图片说明

以上是我将鼠标悬停在“美元账户 1”上时的情况

而且即使鼠标没有在任何特定的帐户上,但在更深层次的菜单中的其他区域,高亮效果仍然存在,见图:

在此处输入图片说明

这显然感觉不对。谁能告诉我我做错了什么?谢谢!

wpf contextmenu highlight itemscontrol

2
推荐指数
1
解决办法
2651
查看次数

如何在 PL/SQL Developer 中轻松检查函数的返回值

完全是数据库新手。现在我创建了一个返回 NUMBER 的函数,我只想检查这个函数的结果。我使用的工具是 PL/SQL Developer,但我找不到输出窗口或其他任何东西。当然,在这种情况下,我不想在任何表中写入任何内容。作为 C++/C# 开发人员,我发现学习如何开发 PL/SQL 有点困难。我什至不能轻易看到我的函数的编译错误。

oracle plsql oracle11g plsqldeveloper

2
推荐指数
1
解决办法
1万
查看次数

VS 构建失败,抱怨“无法找到包含目录的存储库,,,”

我最近下载了最新的 Quartz.NET (3.0.7),它是使用 git 维护的(我猜)。我下载了 zip 文件,打算在一个小任务中使用它。我不想将其提交回来,也不需要将其指向 git 存储库。

但是,当我尝试编译解决方案时,它会抱怨unable to locate repository containing directory...任务 Microsoft.Build.Tasks.Git.targets 中解决方案中的每个项目。所以我的猜测是构建过程正在尝试调用一些与 git 相关的任务?但我在源文件/配置中找不到与 git 相关的任何内容。那么如何从解决方案/项目配置中删除这些与 git 相关的任务呢?

c# git quartz.net-3.0

2
推荐指数
1
解决办法
1206
查看次数

InstallShield Limited Edition是否支持64位安装程序?

我刚开始学习InstallShield LE,因为它似乎是唯一"官方"支持的安装程序项目.但我有一个简单的问题,我甚至无法得到一个绝对的答案:ISLE是否支持构建64位安装程序?我问,因为我发现至少有两个帖子说这是不可能的,比如这个: 用Installshield Limited Edition替换VS安装项目有问题.但是,我无法从flexera的网站获得(否定或肯定)确认.他们甚至似乎没有LE版本的论坛.谁有经验可以证实?谢谢!

installer 64-bit installshield-le

1
推荐指数
1
解决办法
4051
查看次数

.NET Dictionary对象是否可能溢出?

我现在有一个事件处理器类,它有一个Dictionary来存储所有订阅.实际上它是一本字典词典.此进程类与第三方远程服务器通信以发出对目标数据的请求.我问这个问题,因为现在我们正在经历一些偶尔订阅丢失的问题.由于某些原因很难验证这种丢失是否发生在与远程服务器的连接中,我现在必须首先检查我的事件处理器类是否有任何问题.我的第一个疑问是,如果订阅信息由于此Dictionary对象的溢出而丢失.有谁有想法吗?谢谢!

UPDATE

也许我应该多谈一下这个场景,因为代码不是很容易展示.我们曾经使用B的供应商提供的API,将我们的旧SW(我们称之为A)与远程数据服务(称为B)进行通信.但是,由于我们将A更改为64位SW,但为B提供的库仍为32位,因此我们新的64位A不能再使用此库.所以我正在设计一个名为C的32位SW,使用该库连接到B,同时使用WCF保持与64位A的通信.由于C主要是一个pub/sub结构,正如我之前提到的,我使用Dictionary of Dictionary来维护C中的请求和订阅.这就是我们的问题:我们遇到了一些订阅丢失(很长时间没有发布,但在重新初始化订阅后,我们可以在A处获得出版物.我们不容易检查B的反馈,看看是否存在任何错误配置.我的WCF服务日志也没有显示任何错误.我不得不怀疑这个问题只发生在C语言上.我知道多线程问题所以我已经锁定了Dictionary的每个操作.但我想不出什么可能是错的.顺便说一句,它不像C,内存耗尽,C崩溃了.

.net dictionary overflow

1
推荐指数
1
解决办法
106
查看次数

如何只允许WPF窗口的高度调整大小?

具体而言,我有一个Window,其Content被设置为UserControl.并且我想允许用户拖动以增加高度Window,但Width应该是固定的且不可调整大小.我想我有这样的属性可以修改,但我不能让它们按我的意愿行事:

  • Window.SizeToContent,可用值:手动,宽度,高度,

  • WidthAndHeight Window.ResizeMode,可用值:CanMinimize,
    CanResize,CanResizeWithGrip,NoResize

  • 当然还有最小/最大高度,宽度 UserControl

但是什么样的组合可以实现我想要的呢?

c# wpf

1
推荐指数
1
解决办法
1424
查看次数