相关疑难解决方法(0)

错误消息'无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.

我使用Entity Framework,SQL Server 2000,Visual Studio 2008和Enterprise Library 开发了一个应用程序.

它在本地工作得非常好,但是当我将项目部署到我们的测试环境时,我收到以下错误:

无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息

堆栈跟踪:在System.Reflection.Module._GetTypesInternal(StackCrawlMark和stackMark)

在System.Reflection.Assembly.GetTypes()

at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadTypesFromAssembly(LoadingContext context)

在System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.InternalLoadAssemblyFromCache(LoadingContext context)

at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadAssemblyFromCache(Assembly assembly,Boolean loadReferencedAssemblies,Dictionary 2 knownAssemblies, Dictionary2&typesInLoading,List`1&errors)

at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection,Assembly assembly,Boolean loadReferencedAssemblies)

at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyForType(Type type)

at System.Data.Metadata.Edm.MetadataWorkspace.LoadAssemblyForType(Type type,Assembly callingAssembly)

at System.Data.Objects.ObjectContext.CreateQuery [T](String queryString,ObjectParameter [] parameters)

实体框架似乎有问题,任何线索如何修复它?

c# entity-framework

324
推荐指数
11
解决办法
34万
查看次数

Visual Studio中大型解决方案的最佳实践(2008)

我们有一个包含大约100多个项目的解决方案,其中大多数是C#.当然,开放和构建需要很长时间,所以我正在寻找这种野兽的最佳实践.我希望得到答案的问题包括:

  • 你如何最好地处理项目之间的引用
    • 应该"打开或关闭本地"吗?
  • 每个项目应该构建到自己的文件夹,还是应该构建到相同的输出文件夹(它们都是同一个应用程序的一部分)

  • 解决方案的文件夹是组织内容的好方法吗?

我知道将解决方案分解为多个较小的解决方案是一种选择,但是它带有自己的重构和构建头痛,所以也许我们可以将其保存为单独的线程:-)

c# msbuild projects-and-solutions visual-studio-2008

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

什么时候copy-local应该设置为true,什么时候不应该?

我想知道什么时候设置copy-local=true引用有任何启发式方法?

如果引用类型只在内部使用我可以设置copy-localtrue,但如果被引用类型暴露作为参数和返回值我设置copy-localfalse和指示时,应使用我的媒体库的依赖特定版本应参照?

谁能为我澄清一下这个?

.net msbuild reference copy-local

69
推荐指数
5
解决办法
6万
查看次数

DLL引用没有复制到项目bin中

项目A引用项目B,项目B引用外部DDL(使用NuGet恢复).DLL应该被复制到 Project A的bin文件夹(以及 Project B的DLL):

DLL引用复制到Bin

在我的例子中,当运行项目A时,我得到以下异常抛出:

无法加载文件或程序集'PostSharp,Version = 3.2.18.0,Culture = neutral,PublicKeyToken = b13fd38b8f9c99d7'或其依赖项之一.该系统找不到指定的文件.

DLL未被复制到项目A的bin中.来自Project B的所有其他外部引用都被正确复制,这对我来说很困惑.

Copy Local对于所涉及的所有引用,都设置为true.例:

复制本地参考

我该怎么做呢?

注意:使用Visual Studio 2013.

.net c# solution .net-assembly visual-studio

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

项目参考的"复制本地"是否可传递?

WRT.拟议的欺骗:由于这里的问题暗示了相关的问题,我宁愿认为这不是一个骗局.

首先,我确实阅读了"复制本地"和项目参考的最佳实践是什么?(也是这个)我无论如何都要试试这个,但是得到一般反馈似乎是必要的,因为关于这个东西的文档非常糟糕,我只是在VS2010上,也许他们在新版本中改变了一些东西很高兴知道.

其次,我只对这个问题的项目引用感兴趣,因为我读过GAC的程序集处理方式不同而GAC与我的问题无关.

第三,在阅读了建议的欺骗之后,但更多的是@Albireo这里的好答案,它似乎也很重要,区分文件依赖,其中依赖引用dll汇编文件和项目依赖(即我问的是什么) about),其中依赖项引用项目并隐式引用该项目的输出文件.

无论如何,这是我认为有点奇怪的情况,但仍然:

  • 2个C#可执行项目
  • n C#dll组装项目
  • 这两个可执行文件具有不同的输出目录,因为它们将单独部署,并且它们在开发人员计算机上也是分开的
  • 这两个可执行文件依赖于某些DLL程序集(可能相互依赖)
  • 有三个输出目录:
    • /x1 可执行1项目
    • /x2 对于可执行2项目
    • /lib 对于所有的dll程序集

该DLL组件已经Copy Local设置false了自己的项目引用,因为它们都建立在相同的输出目录.

2个可执行项目已设置Copy Localtrue所有他们直接引用的DLL组件项目引用,这样的DLL将被复制到/x1 /x2分别.

现在的问题是.到被DLL文件不能直接通过一个可执行的项目引用,但传递地通过引用的程序集:请问组件,这是只有通过其他组件引用传递性,被复制到输出文件夹的可执行文件的,当"复制本地" 设定为第一次装配时是真的吗?

例: …

.net c# msbuild copy-local visual-studio

30
推荐指数
2
解决办法
7085
查看次数

如何从MSBUILD覆盖.NET中的引用的CopyLocal(专用)设置

我已经和它搏斗了几天,经过大量的搜索,我找不到我应该走的路.

我想要做的是建立一个MSBUILD项目,它将构建我们的整个.NET应用程序(8个解决方案的常量,可能有250个项目在它们之间拆分),并从单个项目文件中覆盖了许多设置以进行调试构建为了我自己.

具体来说,我想构建我们的发布配置,优化关闭并生成完整的调试信息/ pdbs.另外,为了减少我们当前超长的构建时间,我希望每个项目的每个引用都"复制本地"(或实际的proj文件xml中的私有)为false.

第一件事情相当简单,我可以相当轻松地覆盖项目级属性(你甚至可以使用/ p从MSBuild命令行执行此操作),但我无法弄清楚如何覆盖引用上的属性.我已经尝试过在StackOverflow和网络上看到的几件事,但还没有解决方案.

我可以通过改变Microsoft.Common.targets做我想做的事情,注释掉_CopyFilesMarkedCopyLocal目标中的代码完全跳过这些文件的复制.但我不想改变我的全局配置并在所有情况下都这样做.我创建了自己的备用目标文件 - 如果我将单个项目文件更改为指向它,则可以正常工作 - 但我无法弄清楚如何指定它在顶层使用(我的.proj文件只是构建所有8种解决方案).如果我能以某种方式覆盖顶层的_CopyFilesMarkedCopyLocal目标,那将是很好的,这样如果MS更改默认目标文件,我的构建不会搞砸,但我也无法弄清楚如何使这项工作.

最好的办法是,如果有一种方法可以覆盖引用级属性,就像你可以项目级属性一样,而不必重写/覆盖构建目标的东西 - 但是我没有发现任何可能的信息.

在此先感谢任何帮助.

PS我实际上不可能只浏览所有项目文件并进行更改; 我需要一个解决方案,将现有代码保留原样.

.net msbuild

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

Visual Studio是否优化了传递引用?

我很抱歉提前,不是那么清楚,标题.

我在Visual Studio(2010)中遇到了一个奇怪的行为.

让我们说我的解决方案中有三个项目:A,B和C.

A has a reference on B

B has a reference on C

C has a reference on an assembly (log4net.dll)
Run Code Online (Sandbox Code Playgroud)

所有这些都配置为Copy Local True.

我负责项目A,另外两个开发人员负责项目B和C.

项目B使用位于其中一个类中的项目C中的几个(静态)方法.我正在使用B中没有使用C语言的其他类.

当我构建解决方案(项目A被配置为主项目)时,我希望在项目A的输出文件夹中看到C及其引用的程序集的结果.实际发生的是C的结果被复制到输出B的文件夹但在A的输出文件夹中不存在

我花了一些时间才弄清楚原因是A没有使用C中的任何东西(直接或间接).

所以问题是:它是Visual Studio的内置优化功能还是我做错了什么?

c# visual-studio-2010

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

在Visual Studio中使用外部工具进行C#构建

使用Visual Stdio 2008时,可以使用内部工具构建C++项目,而不是让IDE直接调用MSVC.如果使用跨平台构建系统,这可以提高跨平台构建的一致性.

但是,我无法弄清楚如何像C#项目那样做.可以简单地将其注册为具有C#源的本机项目,但是,您将失去通过C#项目获得的一些优势.更重要的是,这将意味着允许项目直接构建和使用外部工具(这是可悲的必要)将需要两个单独的项目,而不是仅仅创建一个备用构建配置来调用外部工具.

有谁知道是否可以阻止Visual Studio csc自行调用而是调用外部工具?

编辑:显然有一些误解.这里的目标不是编译Visual Studio之外的任何东西.相反,它允许Visual Studio作为IDE而不是构建系统.已经有一个(基于Scons的)构建系统能够编译C#和C++源代码,并且Visual Studio已经配置为调用Scons来编译C++项目.我正在尝试对其进行配置,以便当您点击"构建"按钮时,它将为C#项目以及C++项目调用Scons.

c# build visual-studio

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

引用到单独的子文件夹

我花了几天的时间,终于找到了一个似乎有效的解决方案。然而,它似乎有点脆弱,或者可能是不明智的。

我希望所有非系统引用的程序集(当前使用的项目库是 NuGet 管理的)都包含在构建输出的“libs”子文件夹中。

我的 csproj 文件底部包含的以下代码段执行此操作(通过谷歌搜索和我在这里找到的几个问题构建。)

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets. -->
  <Target Name="BeforeBuild">
    <Message Text="### Removing existing 'lib' folder" Importance="high" />
    <RemoveDir Directories="$(TargetDir)libs" />
  </Target>
  <Target Name="MoveLibrariesOnBuild" AfterTargets="Build">
    <ItemGroup>
        <Libraries Include="%(Reference.HintPath)" >
           <MissingHintPath>$([MSBuild]::ValueOrDefault('%(Reference.HintPath)', '').Equals(''))</MissingHintPath>         
        </Libraries>
    </ItemGroup>
    <Message Text="### Moving libraries to 'libs' ###" Importance="high" />
    <Copy SourceFiles="@(Libraries)" 
            DestinationFiles="$(TargetDir)libs\%(Filename).dll" 
            Condition="%(Libraries.MissingHintPath) == False" 
            SkipUnchangedFiles="false" 
            OverwriteReadOnlyFiles="true" />
  </Target> …
Run Code Online (Sandbox Code Playgroud)

c# msbuild visual-studio

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