我想知道什么时候设置copy-local=true
引用有任何启发式方法?
如果引用类型只在内部使用我可以设置copy-local
到true
,但如果被引用类型暴露作为参数和返回值我设置copy-local
到false
和指示时,应使用我的媒体库的依赖特定版本应参照?
谁能为我澄清一下这个?
我在后期构建事件中使用此命令从项目生成nuget包.变量%conf%
设置为正确的配置(调试或发布),并且%1
是项目名称(例如"MyCompany.MyProject").
nuget pack -Prop Configuration=%conf% "%1.csproj" -exclude *.sql -IncludeReferencedProjects
Run Code Online (Sandbox Code Playgroud)
此软件包仅供我们自己使用,永远不会在nuget上发布.它以我们的私有存储库结束.
在项目中,有一个设置为generate action : content
和的文件copy local : always
.(我的视觉工作室是法语,所以我不是百分之百地确定了它的变形).我们来命名吧importantfile.xml
.
在生成的包中,我最终得到了这个结构:
- content
- importantfile.xml
- lib
-net45 (.NetFramework,Version=v4.5)
-MyCompany.MyProject.dll
Run Code Online (Sandbox Code Playgroud)
哪个好,我想importantfile.xml
部署在包中,因为,这个文件很重要!
当我在另一个项目中安装软件包时,importantfile.xml
将部署在项目的根目录下.没关系.但事实并非如此copy local : always
.
我需要的importantfile.xml
是copy local : always
在这个项目中,我安装我的包.
我怎样才能做到这一点?
备注:
我可以copy local : always
在安装软件包后立即设置文件,这没什么大不了的.如果以后更新软件包会让这个属性按原样,我会忍受它,但事实并非如此.当更新包,copy local
被重置了以never
(为说明这里).
项目文件夹中有一个nuspec文件,这里是:
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version> …
Run Code Online (Sandbox Code Playgroud) copy-local visual-studio nuget nuget-package visual-studio-2012
TL; DR是否有任何官方文档详细描述<private>
/"复制本地"选项如何与MSBuild一起使用?应该考虑什么价值?
当你添加一个项目引用从一个项目在Visual Studio中的另一个,它会加入<ProjectReference Include=".....csproj">
到.csproj
的MSBuild文件.
当您将 Visual Studio中的一个项目的文件引用添加到文件系统中的程序集文件时,它将添加<Reference Include="Foo"> <HintPath>....Foo.dll</HintPath> ...
到.csproj
MSBuild文件.
在这两种情况下,Visual Studio的设置Copy Local = True|False
,一个子元素<Private>True</Private>
或<Private>False</Private>
将增加.
Reference
并且ProjectReference
似乎在Common MSBuild Project Items下记录:
Run Code Online (Sandbox Code Playgroud)<ProjectReference> Represents a reference to another project. Item Name Description ------------------------- Name ... Project ... Package ... <Reference> Represents an assembly (managed) reference in …
.net msbuild copy-local visual-studio msbuild-projectreference
我可以在Visual Studio中将"复制本地"的默认选项设置为False吗?在大多数情况下,当我添加一个dll作为项目的依赖项时,我希望将Copy Local属性设置为False.默认情况下,它是True.有没有办法更改Visual Studio的默认行为?(2008年)
WRT.拟议的欺骗:由于这里的问题暗示了相关的问题,我宁愿认为这不是一个骗局.
首先,我确实阅读了"复制本地"和项目参考的最佳实践是什么?(也是这个)我无论如何都要试试这个,但是得到一般反馈似乎是必要的,因为关于这个东西的文档非常糟糕,我只是在VS2010上,也许他们在新版本中改变了一些东西很高兴知道.
其次,我只对这个问题的项目引用感兴趣,因为我读过GAC的程序集处理方式不同而GAC与我的问题无关.
第三,在阅读了建议的欺骗之后,但更多的是@Albireo这里的好答案,它似乎也很重要,区分文件依赖,其中依赖引用dll汇编文件和项目依赖(即我问的是什么) about),其中依赖项引用项目并隐式引用该项目的输出文件.
/x1
可执行1项目/x2
对于可执行2项目/lib
对于所有的dll程序集该DLL组件都已经Copy Local
设置false
了自己的项目引用,因为它们都建立在相同的输出目录.
2个可执行项目已设置Copy Local
到true
所有他们直接引用的DLL组件项目引用,这样的DLL将被复制到/x1
/x2
分别.
现在的问题是.到被DLL文件不能直接通过一个可执行的项目引用,但只传递地通过引用的程序集:请问组件,这是只有通过其他组件引用传递性,被复制到输出文件夹的可执行文件的,当"复制本地" 被设定为第一次装配时是真的吗?
例: …
在WPF项目中,只有在XAML中使用的引用不被复制到bin文件夹,即使CopyLocal
设置为true,在抱怨这个职位.对于MVVM模式,通常使用第三方控件而根本没有代码隐藏引用.
受此帖的启发,我正在使用下面的解决方法.然而,这很容易,必须手动维护变量列表与整个项目中XAML文件中实际使用的变量列表同步,这些变量列表会不断变化.我的问题是,是否有真正的解决方案或更好的解决方法?(我知道使用post-build脚本的想法,IMHO不易发现并且更容易受到更改.)
internal static class BuildTricker
{
private static readonly RadTreeView radTreeView;
static BuildTricker()
{
// Set and get once to avoid compiler optimization.
radTreeView = null;
if (radTreeView != null)
{
throw new InvalidOperationException("This should never happen.");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我为这种行为提出了一个连接问题.
VS 2015
复制到输出GAC
项目引用的引用,而不管复制本地设置如何.
VS 2010
不会使用相同的解决方案和项目,尊重复制本地属性.到目前为止,我发现的唯一解决方法是Microsoft.Web.Services3.dll
在项目A中添加一个直接引用,并将其设置为复制local = false.
重现步骤:
Project A
|__ Project B (Project Reference, copy local = true)
|__Microsoft.Web.Services3.dll (GAC, copy local = false)
Run Code Online (Sandbox Code Playgroud)
实际:
Microsoft.Web.Services3.dll
正被复制到项目A的输出目录中.
预期:
Microsoft.Web.Services3.dll
没有被复制到项目A的输出目录.
知道为什么会这样吗?在MSDN文档中明确指出GAC
的依赖不应该被复制到输出和VS 2010
尊重这一点.
我有一个依赖于几个DLL引用的Visual Studio项目.以下是我的csproj中这些引用的示例:
<ItemGroup>
<Reference Include="Class1.Project1">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\bin\Class1.Project1.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Class1.Project2">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\bin\Class1.Project2.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
但是,当我将此类作为项目依赖项包含在Web站点项目中时,Visual Studio将查找上面显示的依赖项的依赖项.在构建期间,Visual Studio将"复制本地"属性默认为"True",并将这些依赖项复制到我的网站的〜/ bin目录中.
反过来,这会覆盖此目录中已存在的DLL文件的版本.这会导致以下错误:
无法加载文件或程序集'Class5.Project5,Version = 3.6.1861.2,Culture = neutral,PublicKeyToken = dfeaee0e3978ac79'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
如何让我的Visual Studio默认情况下,"复制本地"设置为"假"的一切?我不希望Visual Studio在构建期间自动复制DLL文件.我也不希望我的领带构建以非常一个DLL的特定版本.
如屏幕截图所示,ClassLibrary1依赖于ClassLibrary2,ClassLibrary2依赖于ClassLibrary3.并且"复制本地"设置为"真".但是当我编译ClassLibrary1时,ClassLibrary3将不会被复制到bin文件夹中.
那么如何配置Visual Studio项目文件以使其复制间接引用?
Visual Studio默认将所有dll复制到每个项目的bin文件夹.这还包括系统dll'(mscorlib.dll和System.dll除外),例如System.Xml.Linq,System.ComponentModel.Composition(包括自SL4以来)等.
由于这些文件包含在每个XAP中,因此XAP大小会大幅增加.在我的有限测试中,将"Copy local"设置为false似乎并没有破坏任何东西.为什么Visual Studio将这些文件添加到bin路径?由于用户已经拥有Silverlight,我可以假设这些程序集已经安装在每个用户的GAC中,或者我错过了什么?
您好,我知道有人问过这个问题,但没有得到答案。\n当我想使用安装在 C:\\Program files (x86)\\Dummu_API.dll 上的 dll 时遇到问题
\n\n当我运行我的应用程序时,它抛出异常:
\n\n\n\n\n无法加载文件或程序集“Dummy_API,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null\”或其依赖项之一。该系统找不到指定的文件。
\n
我的项目的引用为 Copy Local = false 和特定版本 = false。我的项目也是 x86 平台目标。
\n\n我不知道为什么我的应用程序找不到程序集。知道发生了什么吗?
\n我正在从同一解决方案中的另一个项目引用 Visual Studio 解决方案中的一个项目。被引用的项目(项目 B)具有 Microsoft.Owin.Host.HttpListener nuget 包,因此其中引用了 .dll。正在构建引用项目 B(项目 A)的项目。输出文件夹获取项目 B 中引用的所有 dll,但 Microsoft.Owin.Host.HttpListener.dll 除外,即使它被标记为 Copy Local - true。
Microsoft.Owin.Host.HttpListener.dll 是迄今为止我遇到的唯一一个拒绝将其作为 MSBuild 的 _CopyFilesMarkedCopyLocal 步骤的一部分复制到项目 A 的构建输出,而不管设置如何。
我试图将它添加到 app.config 中的条目中,但没有帮助。
我已经安排了展示引用问题的示例项目并将其上传到 GitHub here。
您可以随意设置。
在问这个问题之前,我已经查看了 Stackoverflow 中的相关问题,但没有回答或不相关。
请给我一个提示,如何按预期将 .HttpListener.dll 与其他 .dll 一起复制到引用项目输出。
copy-local ×12
.net ×7
msbuild ×4
reference ×4
c# ×3
nuget ×1
owin ×1
self-hosting ×1
silverlight ×1
wpf ×1
xaml ×1