Visual studio 如何让Visual Studio在未经我的许可的情况下停止在生成过程中复制DLL?
我有一个VisualStudio项目,它依赖于几个DLL引用。以下是我的csproj中的参考资料示例:Visual studio 如何让Visual Studio在未经我的许可的情况下停止在生成过程中复制DLL?,visual-studio,copy-local,Visual Studio,Copy Local,我有一个VisualStudio项目,它依赖于几个DLL引用。以下是我的csproj中的参考资料示例: <ItemGroup> <Reference Include="Class1.Project1"> <SpecificVersion>False</SpecificVersion> <HintPath>..\bin\Class1.Project1.dll</HintPath> <Priva
<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>
假的
..\bin\Class1.Project1.dll
假的
假的
..\bin\Class1.Project2.dll
假的
然而,当我将此类作为项目依赖项包含在网站项目中时,VisualStudio正在查找上述依赖项的依赖项。在构建过程中,VisualStudio将“Copy Local”属性默认设置为“True”,并将这些依赖项复制到我的网站的~/bin目录中
这反过来会覆盖此目录中已存在的DLL文件的版本。这会导致以下错误:
无法加载文件或程序集
'Class5.Project5,版本=3.6.1861.2,
文化=中立,
PublicKeyToken=dfeaee0e3978ac79'或
它的一个依赖项。位于
程序集的清单定义不正确
与程序集引用不匹配。
(来自HRESULT的异常:0x8013100)
如何使Visual Studio将所有内容的“复制本地”设置默认为“False”?我不希望Visual Studio在生成过程中自动复制DLL文件。我也不想将我的构建绑定到非常特定的DLL版本。我曾经遇到过这个问题 发布时:防止在现有dll文件上写入的最简单方法是将它们设置为只读。对于每个无法替换的文件,您将在发布时收到一条警告,但该文件可以完成此任务
编译时:要自动关闭CopyLocal,需要将dll文件放在GAC上。为什么bin目录中已经有其他版本 无论如何,我想知道使用Web应用程序项目是否会遇到同样的问题。因为它是一个项目,所以它有一个单独的文件列出直接引用,如果这些引用是项目引用(对同一解决方案中其他程序集的输出的引用),那么MSBUILD可以确保使用正确的版本
看看您是否可以通过从一个新的web应用程序项目开始并添加引用来重现这一点。我觉得好像您有多个项目配置为输出到同一个目录中-这是真的吗 如果是这样,您将需要检查您的配置,因为VisualStudio假定(不,需要)每个项目都有一个唯一的输出目录 你还写道: 这反过来会覆盖此目录中已存在的DLL文件的版本 这些现有文件来自哪里 VisualStudio假定它有权在构建输出目录中进行它认为合适的任何更改—试图与它争论是通向一个全新痛苦世界的好途径
(不幸的是,我是凭经验说的。叹气。)您可以在项目文件中尝试以下内容
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
false
然后,在你的代码中试试这个
<ItemGroup>
<Reference Include="Class1.Project1">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\bin\Class1.Project1.dll</HintPath>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</Reference>
<Reference Include="Class1.Project2">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\bin\Class1.Project2.dll</HintPath>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</Reference>
</ItemGroup>
假的
..\bin\Class1.Project1.dll
假的
假的
..\bin\Class1.Project2.dll
假的
VS不要求每个项目都有唯一的输出目录。在我工作的地方,我们有1000多个项目将所有内容输出到一个bin目录。(诀窍是从这个输出目录创建引用。)我们使用nant来填充构建先决条件,并在调试和发布构建之间清理输出目录。这可能不是一个最佳实践,但它确实有效。非常有趣!当我尝试使用VS2003时,我发现编译失败,因为输出目录中的文件正在使用中,当另一个项目试图清除内容时,一个项目保持打开状态。您正在使用哪个版本的Visual Studio?