c#将文件复制到bin目录

时间:2018-01-03 11:18:11

标签: c#

我可以使用属性"将文件放入bin目录;如果是更新"则复制。

我遇到的问题是我需要将大量的dll文件放在我的应用程序旁边。这意味着我的项目中充斥着大量文件。

我想将我的文件放入我的解决方案中的资源文件夹中,但是在构建时将bin文件中的文件存在。我尝试过使用post build事件但是我一直在获取Windows错误代码(即使它成功了)。

是否有其他方法可以让我的应用程序访问外部dll?

1 个答案:

答案 0 :(得分:1)

如果您unload the project file,则可以编辑.csproj文件。

接近结束时,你会发现:

  <!-- 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">
  </Target>
  -->

让我们修改一下。

首先定义AfterBuild任务要复制的Items。请注意,您只需要确保磁盘上存在这些文件在文件夹中(您说它称为资产)并且受源代码管理。您不需要在解决方案或项目中包含任何这些文件。

  <ItemGroup>
    <!-- Include relative to this project file, so ..\assets would bring you to the solution folder 
         Take all files in the assets folder and subfolders, except *.txt files
    -->
    <Asset Include="assets\**" Exclude="*.txt">

    </Asset>
    <!-- take all *.txt files -->
    <TextAsset Include="assets\**\*.txt">
      <!-- meta data -->
      <SubPath>TextFiles</SubPath>
    </TextAsset>  
  </ItemGroup>

现在您将拥有两个Item集合,一个名为Asset,另一个名为TextAsset。这些项目可以在构建Tasks中使用。我们将使用Copy任务。我已经评论了构建脚本来解释会发生什么。

 <!-- this does what the name suggests-->
  <Target Name="AfterBuild">
    <!-- log -->
    <Message Importance="high" Text="Start Copying assets"/>
    <!-- copy Asset files to one folder (flattens) -->
    <Copy SourceFiles="@(Asset)" 
          DestinationFolder="$(OutputPath)"   />
    <!-- copy TextAsset files to a subpath, keep folder structure-->
    <Copy SourceFiles="@(TextAsset)" 
          DestinationFiles="@(TextAsset->'$(OutputPath)%(SubPath)\%(RecursiveDir)%(Filename)%(Extension)')" />
    <!-- done logging -->
    <Message Importance="high" Text="Copied assets"/>
  </Target>

请注意,我使用的属性$(OutputPath)well known properties之一。 item meta data存在类似的列表。

这些更改不会影响visual studio的操作。添加或删除常规项目项目和/或项目设置时,将保留您的更改。由于您将此文件保留在源代码管理中,同样在您的构建服务器上,将运行相同的目标,执行相同的副本。

我更喜欢从命令行测试这些构建目标,只指定我感兴趣的目标,如下所示:

msbuild Application2.csproj /t:AfterBuild

这为您提供了更快的往返时间,而不是完整的构建。